Gitlab+Runner实现Go项目自动打包上传镜像到私有仓库

Gitlab CI/CD可以按照规定的步骤实现从代码编译、代码测试、构建镜像、代码发布等整个过程,这一系列步骤通过在 “.gitlab-ci.yml” 文件中编写设计,通过Gitlab Runner来执行。
这里以构建Beego项目镜像为例实现Go项目构建镜像推送到内部Harbor
1、 项目目录下(main.go文件同级目录)创建.gitlab-ci.yml和Dockerfile文件;
在这里插入图片描述
2、按照个人设计思路编辑上述创建的文件

Dokerfile示例:
FROM “仓库地址”/base/centos:7.9			#这里使用了自己构建的centos基础镜像
ENV LANG en_US.utf8
#拷贝Beego可执行文件
COPY ["go_pro", "/opt/go_pro"]
#拷贝Beego项目依赖文件,这里需要注意:拷贝目录时,不包含目录本身	
COPY ["conf/app.conf", "/opt/conf/"]
COPY ["file", "/opt/file/"]
COPY ["key", "/opt/key/"]
COPY ["shell", "/opt/shell/"]
COPY ["static", "/opt/static/"]
COPY ["swagger", "/opt/swagger/"]
COPY ["views", "/opt/views/"]
EXPOSE 8080					#暴露项目服务端口
CMD cd /opt/ && ./go_pro		#启动容器时执行的命令

.gitlab-ci.yml示例:

# Go project
stages:
  - build
#  - deploy
# 构建任务计划运行之前执行的shell命令
before_script:
  - export GOPATH="/project"
  - export TAG=`date +%s`			#设置镜像tag号
  - mkdir -p  /project/src/
  - cp -r $CI_PROJECT_DIR /project/src/		#拷贝Gitlab上的项目文件到执行目录
  - cd /project/src/go_pro
go:build:
  stage: build
  tags:
    - gitlab-runner					#执行任务的Gitlab Runner的标签
  image: harbor/base/go_docker:1.15.6	#依赖自定义Docker镜像来执行构建任务
  only:								    #打tag推送代码或者web页面手动触发开始业务作业
    - tags
    - web
  script:
    - /go/bin/go build					#编译生成Go项目可执行文件
    - docker build --tag harbor/go/go_pro:$TAG .		#打包镜像
    - docker push harbor/go/go_pro:$TAG          #推送镜像到镜像仓库

完成编写后,Push代码到Gitlab将自动生成作业任务完成打包编译镜像及推送镜像到harbor的过程
在这里插入图片描述
可以通过添加设置来控制作业任务的执行条件,Gitlab CI/CD配置官网参考地址:
https://docs.gitlab.com/ce/ci/yaml/README.html

3、 注意事项
3.1 .gitlab-ci.yml文件中引用的Runner tags 必须和注册Runner时填写的Tags保持一致,否则Gitlab CI的计划任务会一致处于阻塞状态;
3.2 注册Runner选用Docker类型的executor时,修改配置文件,将volumes = ["/cache"]修改为volumes = ["/cache", “/var/run/docker.sock:/var/run/docker.sock”] 实现引用Runner容器宿主机本地的Docker环境;
3.3 Go 项目依赖第三方包 有些通过go get命令无法下载,需要单独拷贝到容器中,这里通过打包基础镜像go_docker 包含构建过程所需的Go 环境及依赖的第三方包来解决;

4、 问题记录
4.1 ERROR: Failed to remove network for build
原因:启动runner时未将本地docker.sock文件挂载到容器,容器中无法调用宿主机docker环境;
解决:修改启动命令,例如:
docker run -d --name fitlab-runner --restart always
-v /opt/gitlab_runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock gitlab-runner:13.6.1
参考地址:https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

4.2 Cannot connect to the Docker daemon at unix:/var/run/docker.sock.
原因:Gitlab Runner任务作业中调用的镜像无Docker环境,也无法调用宿主机的Docker;
解决:参照3.2步骤修改Runner配置, 重启Runner 容器;

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值