本文jenkins部署golang項目流程
- jenkins服務拉取github上的項目
- 構建golang項目並生成docker鏡像[
jenkins調用的是宿主機上的docker環境
,如何調用的,後面會說明] - 啓動golang項目的docker鏡像
docker的安裝這裏就不說了
docker安裝jenkins
Makefile
run:
docker run \
-u root \
-d \
-p 8088:8080 \
-p 50000:50000 \
-e TZ="Asia/Shanghai" \
-v /Users/chen/data/docker/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/bin/docker:/usr/bin/docker \
--name jenkins \
jenkins/jenkins:lts
說明:
-v /Users/chen/data/docker/jenkins:/var/jenkins_home
掛載jenkins的home目錄,jenkins安裝的插件,拉取的項目代碼都在這個目錄裏
-v /var/run/docker.sock:/var/run/docker.sock
與-v /usr/local/bin/docker:/usr/bin/docker
掛載這兩個文件就能在docker容器內訪問宿主機上的docker。官方文檔裏有說明
執行make來安裝jenkins
make run
- 安裝後訪問
http://127.0.0.1:8088/login
- 獲取登錄密碼
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 選擇“選擇插件來安裝”[ 插件安裝很慢,參考 Jenkins安裝插件提速]
- 選擇插件
Localization: Chinese (Simplified)
Docker
Github
Go
SSH
- 添加憑據[Jenkins>憑據>系統>全局憑據]
用於拉取github上的代碼
需要在jenkins容器裏生成ssh
# 進入容器
docker exec -it jenkins bash
# 生成ssh,一路回車就行了
ssh-keygen -t rsa
# 獲取密鑰,下圖Private Key的值
cat ~/.ssh/id_rsa
# 獲取公鑰,加入到github的 SSH keys 裏
cat ~/.ssh/id_rsa.pub
-
全局工具配置[Jenkins>全局工具配置]
-
創建任務
(1). 創建任務
(2). 設置參數與源碼管理。VERSION會在構建docker容器時用到,相當項目版本號;Git> Credentialst選擇第5步
創建的憑據
(3). 構建環境與構建
Dockerfile
FROM alpine:latest
RUN mkdir -p /app
WORKDIR /app
ADD main /app/main
EXPOSE 9999
CMD ["./main"]
cd $WORKSPACE
export GOPROXY=https://goproxy.io
go mod tidy
# 打印依賴,部署成功後查看版本依賴是否如預期
cat ./go.mod
cd ./app/test/http
# linux環境編譯
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
# 構建docker鏡像,項目中需要在當前目錄下有dockerfile,否則構建失敗
docker build -t qicmsg/test/demo:$VERSION .
rm -rf main
docker rm http_test -f
docker run --name http_test -p 9999:9999 -d qicmsg/test/demo:$VERSION
- 開始構建項目
到這裏整體流程就走完了。docker container ls
就能看到剛啓動的容器了。
注:在實際中,通常是jenkins是一臺服務器,運行golang項目的是一臺獨立的服務器(集羣可以用k8s來部署)。在jenkins構建項目後,構建docker鏡像
docker build
並提交到docker倉庫docker push
。然後在7.(3)
步的構建後操作
通過ssh來執行遠端命令部署項目