golang的ci/cd持續集成部署實現
基本實現流程:
用戶git代碼提交 ----》?Jenkins 根據 Dockerfile? + build.sh 腳本執行構建 ------》輸出 bin文件,完成容器鏡像打包構建? ?-------》 運行測試容器,提供測試? ?--------》 測試通過,更新鏡像到線上harbor倉庫------》 更新kubernets 資源文件,完成部署/升級應用。
(注:代碼+Dockerfile+values.yaml 文件均放在 git倉庫中。)
如下為Dockerfile示例:
1、 Dockerfile:
# BUILD 階段
FROM golang:1.9 AS build
#ENV project=app
# 設置我們應用程序的工作目錄
WORKDIR /go/src/app
# 添加所有需要編譯的應用代碼
COPY . /go/src/app
# 編譯一個靜態的go應用(在二進制構建中包含C語言依賴庫)
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .
# 設置我們應用程序的啟動命令
CMD ["./app"]
# 生產階段
FROM scratch AS prod
# 從buil階段拷貝二進制文件
COPY --from=build /go/src/app/app .
EXPOSE 8080
CMD ["./app"]
2、valuse.yaml
存放一些需要更新的字段,例如:
服務名稱
進程啟動命令命令
需求的資源信息 (cpu /mem /disk )
。。。
(? ?Jenkins 根據用戶提供的 valuse? ?,執行build.sh 腳本,生成 k8s 需要的? manifest.yaml 文件 )
3、 build.sh
tag=`date +%Y%m%d%H%M%S`
#構建鏡像
docker build . -t?harbor/dev/app:$tag
#運行測試容器
docker run --name testgo -d -p 1111:8080?harbor/dev/app:$tag
#測試驗證
curl 10.188.61.101:1111
#推送到鏡像倉庫
docker push?harbor/dev/app:$tag
#更新資源文件
sed "s/app:latest/app:$tag/g"? values.conf? >online_manifest.yaml
#部署到生產環境
kubectl apply -f online_manifest.yaml
此種方案優勢:
1、生成的鏡像精簡,部署高效,節省磁盤空間。
2、用戶git提交后,jenkins 可自動完成鏡像構建工作,減去人工干預。
3、結果kubernetes,實現自動化部署。
容器 鏡像服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。