為 Jenkins 安裝 Docker 插件#
如果尚未安裝 Jenkins,請參考我的上一篇文章 docker 部署 Jenkins
由於是使用 Docker 打包和部署應用,因此無需安裝 Go 環境(省去了一個步驟)
在左側找到系統管理
-> 插件管理
-> 可選插件
-> 搜尋Docker
勾選安裝 Docker Pipeline
安裝完成後重新啟動 Jenkins
新建任務#
返回首頁,選擇新建任務
選擇構建一個自由風格的軟體專案
填寫專案名稱
編輯任務#
源碼管理#
在源碼管理
中選擇 Git 選項
Repository URL:填寫你的 Git 專案地址或絕對路徑
Credentials:填寫 git 的憑證,公開專案可以不填寫
Branches to build:你要監控的分支名稱,預設為 master,但現在 GitHub 也改成了 main,所以要注意不要寫錯
構建觸發器#
其他任務觸發、定時構建、輪詢 GitHub 專案、GitHub Hook
暫時可以先不選擇任何選項,有需要時再手動運行調試
構建環境#
不需要任何設定,這是最容易出錯的地方之一
構建#
我在這裡使用 shell 命令來打包和部署
由於我的 Jenkins 可以直接訪問到宿主機的 Docker,應用打包完成後直接生成映像(Image)
IMAGES_NAME='go-qqbot'
CONTAINER_NAME='qqbot1'
echo "IMAGES_ID:$GIT_COMMIT"
docker build -t ${IMAGES_NAME} .
docker stop ${CONTAINER_NAME} || true
docker rm ${CONTAINER_NAME} || true
docker run -d --network botnetwork --name ${CONTAINER_NAME} ${IMAGES_NAME}
docker rmi $(docker images | grep "none" | awk '{print $3}')
echo "部署完成!"
接下來是我的 Dockerfile 文件內容
FROM golang:1.15-alpine AS builder
RUN go env -w GO111MODULE=auto \
&& go env -w CGO_ENABLED=0 \
&& go env -w GOPROXY=https://mirrors.tencent.com/go/,https://goproxy.cn,direct
WORKDIR /build
COPY ./ .
RUN set -ex \
&& cd /build \
&& go build -ldflags "-s -w -extldflags '-static'" -o botqq
FROM alpine:latest
COPY --from=builder /build/botqq /usr/bin/botqq
RUN chmod +x /usr/bin/botqq
WORKDIR /data
ENTRYPOINT [ "/usr/bin/botqq" ]
我使用golang:1.15-alpine
映像來打包應用,然後將打包的文件拷貝到alpine:latest
映像中運行