jenkins配置golang?代碼工程自動(dòng)發(fā)布的實(shí)現(xiàn)方法
前沿
以前go工程都是在我mac上打包成鏡像然后再推到我的docker hub上去,每次更新都要經(jīng)過打包->推送到dockert倉庫->目前服務(wù)重新拉取容器;最近項(xiàng)目代碼量很大,頻繁更新,終于忍不住了,決定把jks得用起來,這樣可以解放下雙手。注:我們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工程,寫個(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)境變量都沒有在jks上配置,因此我需要用/usr/local/go/bin/go來執(zhí)行命令(GO_ROOT 是 /usr/local/go)。
此外,我build go代碼的時(shí)候,在前面加了“CGO_ENABLED=0”。這個(gè)是用來解決容器找不到我的可執(zhí)行程序的問題(會(huì)報(bào)錯(cuò):“/bin/sh: xxxnot found”)
(2)打包成鏡像并且推送到倉庫;
(3)通過ansible在開發(fā)服務(wù)器上執(zhí)行刪除容器啟動(dòng)新容器腳本;
ansible 不會(huì)用的自己百度查下,這個(gè)是用來執(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并沒有安裝什么插件(docker 和go插件),只是用到j(luò)ks的兩個(gè)功能:
1)、從git上拉代碼;
2)、執(zhí)行我的shell腳本;腳本的內(nèi)容有:
(1)編譯go代碼;
(2)打包成鏡像并且推送到倉庫;
(3)通過ansible在開發(fā)服務(wù)器上執(zhí)行刪除容器啟動(dòng)新容器腳本;
其它:
如果你只想生成可執(zhí)行程序并且在遠(yuǎn)端允許(不想要docker),那么你只要在腳本里面寫入:
(1)編譯代碼;
(2)通過ansbile推送可執(zhí)行程序到你目標(biāo)服務(wù)器
(3)ansible 執(zhí)行遠(yuǎn)端的腳本(你可以在里面寫重啟的相關(guān)命令)。
5、調(diào)試方法
我配置jks的時(shí)候遇到兩個(gè)問題:
1、在jks拉取代碼后,打包的可執(zhí)行程序在centos 下能夠運(yùn)行,但是打包到鏡像后,執(zhí)行報(bào)錯(cuò)(“/bin/sh: xxxnot found”),通過百度,在編譯時(shí)語句前面加了CGO_ENABLED=0。
2、打包成鏡像的shell命令報(bào)錯(cuò)
jks拉取的代碼存放在:/var/lib/jenkins/workspace 目錄下。如果碰到問題了,我們可以自己在這個(gè)目錄下手動(dòng)調(diào)試。舉例:
我構(gòu)建了一個(gè)jks 工程“gw_micro_service”。你可以在這個(gè)目錄下手動(dòng)執(zhí)行jks上的那個(gè)shell命令,遇到啥問題可先在這個(gè)目錄下調(diào)試好。

總結(jié):
jks是個(gè)很好的工具,使用方法也很多,我只用了它簡單的功能;其實(shí)這些我也可以寫個(gè)腳本,在我mac上一鍵升級遠(yuǎn)端程序。但是這樣不方便協(xié)同辦公。
到此這篇關(guān)于jenkins配置golang 代碼工程自動(dòng)發(fā)布的文章就介紹到這了,更多相關(guān)jenkins配置golang內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言中init函數(shù)與匿名函數(shù)使用淺析
這篇文章主要介紹了Go語言中init函數(shù)與匿名函數(shù)使用淺析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
go語言實(shí)現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例
在這個(gè)章節(jié)中,我們將會(huì)結(jié)合之前的知識點(diǎn),實(shí)現(xiàn)一個(gè)簡易的并發(fā)網(wǎng)頁爬蟲,我們的爬蟲會(huì)先爬取一個(gè)起始頁面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-08-08
解決Go語言time包數(shù)字與時(shí)間相乘的問題
這篇文章主要介紹了Go語言time包數(shù)字與時(shí)間相乘的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04

