首頁 > 軟體

jenkins設定golang 程式碼工程自動釋出的實現方法

2022-07-26 18:03:04

前沿

以前go工程都是在我mac上打包成映象然後再推到我的docker hub上去,每次更新都要經過打包->推播到dockert倉庫->目前服務重新拉取容器;最近專案程式碼量很大,頻繁更新,終於忍不住了,決定把jks得用起來,這樣可以解放下雙手。注:我們jks直接安裝在內網硬體伺服器上(centos7.9)。

一、在jenkins宿主機上設定go環境;

1、安裝go;

#1.下載golang
wget https://golang.google.cn/dl/go1.16.3.linux-amd64.tar.gz
#2.安裝
tar -xf go1.16.3.linux-amd64.tar.gz -C /usr/local/

2、設定環境變數

1、vi /etc/profile

GO111MODULE=on
GO_PATH=/data/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

讓組態檔立即生效:soruce /etc/profile

列印環境變數:printenv |grep GO
GO_PATH=/data/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

3、驗證環境是否可用

自己建個go工程,寫個hello world 看是否能夠go run main.go

二、jenkis上設定專案

設定步驟:

1、jks上新建專案

新建Item-> Freestyle project

2、“原始碼管理”選單新增git資訊

3、“構建”-》增加構建步驟-》Execute shell

執行我的shell指令碼;指令碼的內容有:

(1)編譯go程式碼;

我的環境變數都沒有在jks上設定,因此我需要用/usr/local/go/bin/go來執行命令(GO_ROOT 是 /usr/local/go)。

此外,我build go程式碼的時候,在前面加了“CGO_ENABLED=0”。這個是用來解決容器找不到我的可執行程式的問題(會報錯:“/bin/sh: xxxnot found”)

(2)打包成映象並且推播到倉庫;

(3)通過ansible在開發伺服器上執行刪除容器啟動新容器指令碼;

ansible 不會用的自己百度查下,這個是用來執行遠端伺服器的命令,運維同學肯定很熟悉。

我需要遠端伺服器,刪除當前容器,並且重新拉去映象並執行。

git checkout $GIT_TAG
echo "-------------build go project-------------------------"
export GOPROXY=https://mirrors.aliyun.com/goproxy/
/usr/local/go/bin/go mod tidy
CGO_ENABLED=0 /usr/local/go/bin/go build -o gw_micro_service main.go
#push docker image to docker hub
echo "-------------push docker image to docker hub-------------------------"
docker build -t gw_micro_service .
docker tag gw_micro_service harbor.zaitugongda.com:5000/stefan/gw_micro_service:latest
docker push harbor.zaitugongda.com:5000/stefan/gw_micro_service:latest
if [ $? -eq 0 ]
then
    echo "push ok"
else
    echo "push faild"
fi
echo "-------------remote servcie restart docker-------------------------"
ip='47.106.89.198'
ansible $ip -m shell -a "bash /data/gw_micro_service/rebuildDocker.sh"

4、如何使用jks的功能

jks非常靈活,我這裡使用的jks並沒有安裝什麼外掛(docker 和go外掛),只是用到jks的兩個功能:

1)、從git上拉程式碼;

2)、執行我的shell指令碼;指令碼的內容有:

(1)編譯go程式碼;

(2)打包成映象並且推播到倉庫;

(3)通過ansible在開發伺服器上執行刪除容器啟動新容器指令碼;

其它:

如果你只想生成可執行程式並且在遠端允許(不想要docker),那麼你只要在指令碼裡面寫入:

(1)編譯程式碼;

(2)通過ansbile推播可執行程式到你目標伺服器

(3)ansible 執行遠端的指令碼(你可以在裡面寫重啟的相關命令)。

5、偵錯方法

我設定jks的時候遇到兩個問題:

1、在jks拉取程式碼後,打包的可執行程式在centos 下能夠執行,但是打包到映象後,執行報錯(“/bin/sh: xxxnot found”),通過百度,在編譯時語句前面加了CGO_ENABLED=0。

2、打包成映象的shell命令報錯

jks拉取的程式碼存放在:/var/lib/jenkins/workspace 目錄下。如果碰到問題了,我們可以自己在這個目錄下手動偵錯。舉例:

我構建了一個jks 工程“gw_micro_service”。你可以在這個目錄下手動執行jks上的那個shell命令,遇到啥問題可先在這個目錄下偵錯好。

總結:

jks是個很好的工具,使用方法也很多,我只用了它簡單的功能;其實這些我也可以寫個指令碼,在我mac上一鍵升級遠端程式。但是這樣不方便協同辦公。

到此這篇關於jenkins設定golang 程式碼工程自動釋出的文章就介紹到這了,更多相關jenkins設定golang內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com