需求:
代码库在私服gitlab上,现需要通过CI/CD流水线操作打包成镜像,并推送到harbor镜像管理仓库
思路:由于我们是需要用gitlab进行整合,当出现流水线运行异常时,我们可到对应目录下执行相应命令,当执行通过后,将成功的命令再重新整合到.gitlab-ci.yml文件里即可
已有环境
Harbor | |
---|---|
IP | 192.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
配置.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
标签:git,harbor,gitlab,HARBOR,镜像,docker From: https://blog.csdn.net/qq_38773240/article/details/141634077解决方案:当.gitlab-ci.yml文件里的stage存在多项时,触发流水线不执行,则需要配置以下tags
这里tags对应yml文件里的tags属性,多个时,用英文逗号分隔即可