首页 > 其他分享 >gitlab+docker+harbor实践

gitlab+docker+harbor实践

时间:2024-08-28 17:26:10浏览次数:13  
标签:git harbor gitlab HARBOR 镜像 docker

需求:

代码库在私服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属性,多个时,用英文逗号分隔即可

标签:git,harbor,gitlab,HARBOR,镜像,docker
From: https://blog.csdn.net/qq_38773240/article/details/141634077

相关文章

  • 【阅己书城】docker部署MySQL及Redis
    一、MySQL1拉取mysql镜像dockerpullmysql:5.72启动mysql容器--name指定容器名字-v目录挂载-p指定端口映射-e设置mysql参数-d后台运行dockerrun--namemysql-v/mydata/mysql/data:/var/lib/mysql-v/mydata/mysql/conf:/etc/mysql-v/mydata/mysql/log:/var/......
  • docker pull通过http代理下载镜像
    有时服务器没有外网环境,要pulldocker镜像就没办法了,只能考虑通过代理或离线下载好导入的方式进行,这里记录下通过http代理的方式。一、dockerpull通过http代理下载镜像1.修改/etc/systemd/system/multi-user.target.wants/docker.servicevi/etc/systemd/system/multi-user.ta......
  • 【阅己书城】docker搭建
    1卸载系统之前的dockersudoyumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logrotatedocker-engine2设置存储库sudoyuminstall-yyum-utilssudoyum-config-manager--add-repohttps:/......
  • Docker运行hello-world镜像失败或超时
     测试docker是否运行成功执行dockerrunhello-world时,报错网络连接失败Unabletofindimage'hello-world:latest'locallylatest:Pullingfromlibrary/hello-worldc1ec31eb5944:Retryingin10secondsdocker:errorpullingimageconfiguration:downloadfailedafte......
  • 使用 pnpm workspace 和 standalone 模式构建 Next.js 的 Docker 镜像
    引言本文将探讨如何利用pnpmworkspace和standalone模式来构建Next.js应用程序的轻量级Docker镜像。这种方法通过仅在node_modules目录中包含必要的文件,显著减少了最终Docker镜像的大小。Standalone模式简介通常情况下,所有在dependencies中列出的包都会......
  • 在Docker中升级时区规则
    背景最近,由于部分国家和地区取消了了夏令时,导致我们的系统中的定时任务出现了提前执行的情况。这个问题的根源在于,我们当前使用的Java开发工具包(JDK)内置的时区规则数据已经过期,无法及时反映各地区时区调整的最新变化。为了解决这一问题,在不升级整个JDK版本的......
  • Docker下使用llama.cpp部署带Function calling和Json Mode功能的Mistral 7B模型
    Docker下使用llama.cpp部署带Functioncalling和JsonMode功能的Mistral7B模型说明:首次发表日期:2024-08-27参考:https://www.markhneedham.com/blog/2024/06/23/mistral-7b-function-calling-llama-cpp/https://github.com/abetlen/llama-cpp-python?tab=readme-ov-file#fu......
  • docker 安装后第一次启动时报错
    启动服务:systemctlstartdocker发生错误未能启动查看日志:systemctlstatusdockerjournalctl-xe发现错误:DependencyfailedforDockerApplicationContainerEngine.应该是有依赖服务未启动成功查看依赖服务:systemctllist-dependenciesdocker.service发现是docker.s......
  • docker和containerd的区别
    目录容器运行时Docker:原先的翘楚Containerd:K8s生态系统的标配容器运行时接口(CRI)Kubernetes与dockershim当前支持的CRI后端Dockershim调用关系对比常用命令容器运行时容器运行时(ContainerRuntime)是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的......
  • 极狐GitLab 管理 K3S 集群实践指南
    K3S是一个轻量级的Kubernetes发行版,安装运行所需的资源比完整的Kubernetes少,因此在一些资源受限制的场景中会经常用到,比如边缘计算。本文将演示如何用极狐GitLab管理K3S集群。具体的步骤包括Kubernetes集群的创建、极狐GitLabKubernetesAgent的创建、极狐GitLabKube......