banner
uyoung

uyoung

twitter

Jenkins部署Go應用

golang

為 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映像中運行

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。