docker+jenkins+github實現golang項目自動部署

本文jenkins部署golang項目流程

  1. jenkins服務拉取github上的項目
  2. 構建golang項目並生成docker鏡像[jenkins調用的是宿主機上的docker環境,如何調用的,後面會說明]
  3. 啓動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
  1. 安裝後訪問 http://127.0.0.1:8088/login
    image.png
  2. 獲取登錄密碼
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  1. 選擇“選擇插件來安裝”[ 插件安裝很慢,參考 Jenkins安裝插件提速]
    image.png
  2. 選擇插件

Localization: Chinese (Simplified)
Docker
Github
Go
SSH

  1. 添加憑據[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

image.png

  1. 全局工具配置[Jenkins>全局工具配置]
    image.png

  2. 創建任務
    (1). 創建任務
    image.png
    (2). 設置參數與源碼管理。VERSION會在構建docker容器時用到,相當項目版本號;Git> Credentialst選擇第5步創建的憑據
    image.png
    (3). 構建環境與構建
    image.png
    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
  1. 開始構建項目
    image.png
    到這裏整體流程就走完了。docker container ls 就能看到剛啓動的容器了。

注:在實際中,通常是jenkins是一臺服務器,運行golang項目的是一臺獨立的服務器(集羣可以用k8s來部署)。在jenkins構建項目後,構建docker鏡像docker build 並提交到docker倉庫docker push。然後在7.(3)步的構建後操作通過ssh來執行遠端命令部署項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章