日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

jenkins配置golang?代碼工程自動(dòng)發(fā)布的實(shí)現(xiàn)方法_Golang

作者:stefan1240 ? 更新時(shí)間: 2022-09-18 編程語(yǔ)言

前沿

以前go工程都是在我mac上打包成鏡像然后再推到我的docker hub上去,每次更新都要經(jīng)過(guò)打包->推送到dockert倉(cāng)庫(kù)->目前服務(wù)重新拉取容器;最近項(xiàng)目代碼量很大,頻繁更新,終于忍不住了,決定把jks得用起來(lái),這樣可以解放下雙手。注:我們jks直接安裝在內(nèi)網(wǎng)硬件服務(wù)器上(centos7.9)。

一、在jenkins宿主機(jī)上配置go環(huán)境;

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、配置環(huán)境變量

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

打印環(huán)境變量:printenv |grep GO
GO_PATH=/data/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

3、驗(yàn)證環(huán)境是否可用

自己建個(gè)go工程,寫(xiě)個(gè)hello world 看是否能夠go run main.go

二、jenkis上配置項(xiàng)目

配置步驟:

1、jks上新建項(xiàng)目

新建Item-> Freestyle project

2、“源碼管理”菜單添加git信息

3、“構(gòu)建”-》增加構(gòu)建步驟-》Execute shell

執(zhí)行我的shell腳本;腳本的內(nèi)容有:

(1)編譯go代碼;

我的環(huán)境變量都沒(méi)有在jks上配置,因此我需要用/usr/local/go/bin/go來(lái)執(zhí)行命令(GO_ROOT 是 /usr/local/go)。

此外,我build go代碼的時(shí)候,在前面加了“CGO_ENABLED=0”。這個(gè)是用來(lái)解決容器找不到我的可執(zhí)行程序的問(wèn)題(會(huì)報(bào)錯(cuò):“/bin/sh: xxxnot found”)

(2)打包成鏡像并且推送到倉(cāng)庫(kù);

(3)通過(guò)ansible在開(kāi)發(fā)服務(wù)器上執(zhí)行刪除容器啟動(dòng)新容器腳本;

ansible 不會(huì)用的自己百度查下,這個(gè)是用來(lái)執(zhí)行遠(yuǎn)程服務(wù)器的命令,運(yùn)維同學(xué)肯定很熟悉。

我需要遠(yuǎn)程服務(wù)器,刪除當(dāng)前容器,并且重新拉去鏡像并運(yùn)行。

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并沒(méi)有安裝什么插件(docker 和go插件),只是用到j(luò)ks的兩個(gè)功能:

1)、從git上拉代碼;

2)、執(zhí)行我的shell腳本;腳本的內(nèi)容有:

(1)編譯go代碼;

(2)打包成鏡像并且推送到倉(cāng)庫(kù);

(3)通過(guò)ansible在開(kāi)發(fā)服務(wù)器上執(zhí)行刪除容器啟動(dòng)新容器腳本;

其它:

如果你只想生成可執(zhí)行程序并且在遠(yuǎn)端允許(不想要docker),那么你只要在腳本里面寫(xiě)入:

(1)編譯代碼;

(2)通過(guò)ansbile推送可執(zhí)行程序到你目標(biāo)服務(wù)器

(3)ansible 執(zhí)行遠(yuǎn)端的腳本(你可以在里面寫(xiě)重啟的相關(guān)命令)。

5、調(diào)試方法

我配置jks的時(shí)候遇到兩個(gè)問(wèn)題:

1、在jks拉取代碼后,打包的可執(zhí)行程序在centos 下能夠運(yùn)行,但是打包到鏡像后,執(zhí)行報(bào)錯(cuò)(“/bin/sh: xxxnot found”),通過(guò)百度,在編譯時(shí)語(yǔ)句前面加了CGO_ENABLED=0。

2、打包成鏡像的shell命令報(bào)錯(cuò)

jks拉取的代碼存放在:/var/lib/jenkins/workspace 目錄下。如果碰到問(wèn)題了,我們可以自己在這個(gè)目錄下手動(dòng)調(diào)試。舉例:

我構(gòu)建了一個(gè)jks 工程“gw_micro_service”。你可以在這個(gè)目錄下手動(dòng)執(zhí)行jks上的那個(gè)shell命令,遇到啥問(wèn)題可先在這個(gè)目錄下調(diào)試好。

總結(jié):

jks是個(gè)很好的工具,使用方法也很多,我只用了它簡(jiǎn)單的功能;其實(shí)這些我也可以寫(xiě)個(gè)腳本,在我mac上一鍵升級(jí)遠(yuǎn)端程序。但是這樣不方便協(xié)同辦公。

原文鏈接:https://blog.csdn.net/stefan1240/article/details/125899130

欄目分類
最近更新