gitlab+docker+harbor实践

需求:

代码库在私服gitlab上,现需要通过CI/CD流水线操作打包成镜像,并推送到harbor镜像管理仓库


思路:由于我们是需要用gitlab进行整合,当出现流水线运行异常时,我们可到对应目录下执行相应命令,当执行通过后,将成功的命令再重新整合到.gitlab-ci.yml文件里即可

已有环境

Harbor
IP192.168.40.222
域名docker-hub.xxx.com

项目代码结构

在这里插入图片描述

即:本人项目为:	xxx-cloud
					-->SpringCloud_01
						-->Activit(微服务根目录)
							--> src
						-->ArangodbService
							--> src
						-->...
					-->SpringCloud_02
						-->...

安装gitlab

注:需要至少30G的空间及内存,尽量预留够大的空间,这里由于我的虚拟机设置太小,导致一直不成功
参考:Gitlab安装与基础操作

代码上传到gitlab

创建git项目后,clone地址到本地,再上传到gitlab即可
此时gitlab展示如下:
注意我们的.gitlab-ci.yml文件需要建在根目录,后续的打docker镜像时,Dockerfile放在对应的微服务根目录下即可
在这里插入图片描述

安装git-runner

注:git-runner为流水线操作,后续配置可直接在gitlab页面上配置
参考:
git-runner安装链接1
git-runner安装链接2

安装docker

注:由于我们项目使用的docker都是23版本,故我在这台搭建gitlab的机器上安装的docker也是23版本
参考:CentOS7下安装Docker

配置docker服务

解决Docker login私有仓库报错:x509: cannot validate certificate for because it
doesn‘t contain any IP SANs

(1)在/etc/docker/daemon.json文件里填入以下内容,如果没有此文件/文件夹,创建即可

[root@yzr etc]# cd docker
[root@yzr docker]# ls
daemon.json  daemon.json.bak
[root@yzr docker]# pwd
/etc/docker
[root@yzr docker]# cat daemon.json
{
        "registry-mirrors": ["https://y0ArAofw.mirror.aliyuncs.com"],
        "insecure-registries": ["填你的harborip","harbor的域名","harbor的ip+端口"]
}

(2)在/etc/hosts文件里新增harbor对应的域名,对应ip

192.168.xxx.xxx docker-hub.xxx.com

(3)重启docker

systemctl daemon-reload
systemctl restart docker.service 

参考:Docker login私有仓库报错

配置.gitlab-ci.yml

# stages为步骤,可定义多个步骤,多个步骤时,流水线触发时也会展示每个步骤执行详情
# 这里由于是测试,将所有步骤都集合在一起了,用于查看是否推送到harbor成功,实际运用时请修改对应参数
stages:
  - build

# 编译全局变量定义
variables:
  HARBOR_USER: "yzr" # harbor登录用户
  HARBOR_PASSWORD: "yzr123" # harbor登录密码
  HARBOR_REGISTRY: "https://192.168.40.222/harbor" # harbor仓库,后续其实没有用到,可忽略此变量
  HARBOR_PROJECT:  "yzr_test" # 仓库下对应的project,例如我需要将镜像放到对应的项目下,则可添加项目名称,用于后续拼接路径
  HARBOR_DOMAIN:  "docker-hub.xxx.com" # 对应harbor域名

job_push_to_harbor:
  stage: build
  #tags:build -# 可选项,对应git-runner里的配置,当tag为build时触发流水线,如果git-runner里只配置了一项,且stages也只有一个步骤,则自动绑定,此tags配置可忽略,当需要多个步骤时,需要声明tags,并把tags对应值配置到git-runner即可
  services:
    - name: docker:dind
      entrypoint: [ "dockerd-entrypoint.sh", "--tls=false" ] #可选,这里参照了以前的项目,不一定需要此值
  before_script:
    - cd SpringCloud_01 #cd到对应的微服务所在的根目录
    - mvn package # maven打包,此时会读当前目录下的pom.xml文件,打包到对应目录下
    - cd Activiti7 # cd到微服务根目录下,注意此时此文件夹下应有上一步maven打包的jar包,需要根据pom文件找到对应的存放目录
     #登录到对应的harbor/项目,这里是因为我们需要后续进行推送,需要先登录进入到对应要存放的项目仓库地址里,这里如果是其他项目或没有加后面的project路径,push时会报错无权限push
    - docker login -u "$HARBOR_USER" -p "$HARBOR_PASSWORD"  $HARBOR_DOMAIN/$HARBOR_PROJECT 
  script:
  	# docker 创建镜像命令,调测时可以先在服务器测试此命令,后面接的$CI_BUILD_TAG 是你的tag打的标签名称
    - docker build . -t $HARBOR_DOMAIN/$HARBOR_PROJECT/activiti7:$CI_BUILD_TAG
    - docker push $HARBOR_DOMAIN/$HARBOR_PROJECT/activiti7:$CI_BUILD_TAG
  only:
    - tags # 当打tag时,触发此步骤

测试

git打tag镜像

在这里插入图片描述
在这里插入图片描述

查看流水线

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看harbor

在这里插入图片描述

问题1:Dockerfile的From 镜像,出现异常

解决方案:尝试在服务器内先pull下来,pull不成功时考虑在/etc/docker/daemon.json文件里新增对应的ip+端口,重启docker,pull下来后可使用docker images查看到拉取下来的镜像,如果此时pull的镜像地址和Dockerfile里的From不一致,请修改为对应的地址,再重新执行命令即可

问题2:多个stage时,流水线暂停,提示需要配置git-runner

解决方案:当.gitlab-ci.yml文件里的stage存在多项时,触发流水线不执行,则需要配置以下tags
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里tags对应yml文件里的tags属性,多个时,用英文逗号分隔即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值