上一章介绍了 如何安装gitlab、gitlab-runner、Docker
Linux安装gitlab+gitlab-runner+docker 实现自动化打包记录(一)
本章以之前完成的golang项目介绍如何实现自动化打包
主要用到两个文件
.gitlab-ci.yml
variables:
DOCKER_DRIVER: overlay2
DOCKER_IMAGE_TAG: $DOCKER_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
cache:
paths:
- target
stages:
- package
docker-build:
stage: package
only:
- branches
- tags
except:
- master
tags:
- build
script:
- docker login -u $DOCKER_REGISTRY_BUILDER -p $DOCKER_REGISTRY_BUILDER_PASSWORD $DOCKER_REGISTRY
- docker rmi $DOCKER_IMAGE_TAG || true
- docker build
--label CI_PROJECT_NAME="$CI_PROJECT_NAME"
--label CI_PROJECT_NAMESPACE="$CI_PROJECT_NAMESPACE"
--label CI_COMMIT_SHA="$CI_COMMIT_SHA"
--label CI_COMMIT_REF_NAME="$CI_COMMIT_REF_NAME"
--label CI_COMMIT_TITLE="$CI_COMMIT_TITLE"
--label CI_COMMIT_MESSAGE="$CI_COMMIT_MESSAGE"
--label CI_PIPELINE_URL="$CI_PIPELINE_URL"
--label GITLAB_USER_LOGIN="$GITLAB_USER_LOGIN"
-t $DOCKER_IMAGE_TAG .
- docker push $DOCKER_IMAGE_TAG
# 重复向 harbor 推送 ID 相同的镜像,将导致 harbor 不能清理原镜像,因此,对于 review-apps 的镜像,我们同时将其标记到一个 recycle 仓库中
# 以便后期可以在 harbor 中对其进行删除和垃圾回收
# 参考 https://github.com/goharbor/harbor/blob/master/docs/user_guide.md#deleting-repositories
- export datetime=`date +%Y%m%d-%H%M%S`
- docker tag $DOCKER_IMAGE_TAG $DOCKER_IMAGE_TAG-$datetime
- docker push $DOCKER_IMAGE_TAG-$datetime
- docker rmi $DOCKER_IMAGE_TAG-$datetime
- docker logout $DOCKER_REGISTRY
其中
D
O
C
K
E
R
R
E
G
I
S
T
R
Y
B
U
I
L
D
E
R
、
DOCKER_REGISTRY_BUILDER 、
DOCKERREGISTRYBUILDER、DOCKER_REGISTRY_BUILDER_PASSWORD 、$DOCKER_REGISTRY在gitlab setting-ci/cd-variables设置 为全局变量
Dockerfile
#源镜像
FROM golang:latest
#设置工作目录
WORKDIR /***
#将服务器的go工程代码加入到docker容器中
ADD . /***
RUN echo "Asia/Shanghai" > /etc/timezone
#设置环境变量
RUN export GO111MODULE=on && export GOPROXY=https://goproxy.cn,direct && go env -w GOPROXY=https://goproxy.io && go env -w GOPRIVATE="*.gitlab.com,*.gitee.com"
# init gomod
RUN go mod init ***
#go构建可执行文件
RUN go build .
#最终运行docker的命令
ENTRYPOINT ["./***"]