網(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
相關(guān)推薦
- 2023-03-29 Pytorch中的數(shù)據(jù)轉(zhuǎn)換Transforms與DataLoader方式_python
- 2021-12-12 C/C++?Qt?數(shù)據(jù)庫(kù)QSql增刪改查組件應(yīng)用教程_C 語(yǔ)言
- 2022-03-24 使用sublime?Text3過(guò)程中的各種問(wèn)題的解決_相關(guān)技巧
- 2022-10-08 Python中的enum的使用方法_python
- 2022-09-30 Docker?compose部署minio服務(wù)_docker
- 2022-04-21 MongoDB高效讀寫(xiě)海量數(shù)據(jù)的方法_MongoDB
- 2022-10-30 詳解Python?中的命名空間、變量和范圍_python
- 2021-09-01 Go語(yǔ)言集成開(kāi)發(fā)環(huán)境IDE詳細(xì)安裝教程_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支