当前位置:   article > 正文

持续集成交付CICD:Jenkins流水线操作Harbor仓库_cicd habor

cicd habor

目录

一、实验

1.Jenkins主节点安装Docker

2.Jenkins主节点安装Harbor

3.Jenkins从节点安装Docker

4.Jenkins流水线操作Harbor仓库

二、问题

1.Jenkins主节点登录Harbor仓库报错

2.Jenkins流水线里从节点操作docker报错

3.Jenkins流水线里从节点远程登录Harbor仓库报错


一、实验

1.Jenkins主节点安装Docker

(1)环境

表1 主机

主机架构版本IP备注
jenkins

jenkins主节点      

2.414.2192.168.204.15:8080

 gitlab runner

(从节点)

docker24.0.7
harbor私有仓库1.2.2192.168.204.15
gitlab

gitlab 主节点       

12.10.14192.168.204.8:82

  jenkins slave

(从节点)

sonarqube9.6192.168.204.8:9000
docker24.0.7

(2)YUM安装Docker

目前 Docker 只能支持 64 位系统。

  1. #关闭防火墙和selinux
  2. systemctl stop firewalld.service
  3. setenforce 0
  4. #安装依赖包
  5. yum install -y yum-utils device-mapper-persistent-data lvm2
  6. --------------------------------------------------------------------------------------------
  7. #yum-utils:提供了 yum-config-manager 工具。
  8. #device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
  9. 它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
  10. #device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
  11. --------------------------------------------------------------------------------------------
  12. #设置阿里云镜像源
  13. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  14. #安装 Docker-CE并设置为开机自动启动
  15. yum install -y docker-ce #docker-ce-cli、containerd.io 会作为依赖包被安装
  16. systemctl start docker.service
  17. systemctl enable docker.service

(3) 查看Docker信息

  1. #查看 docker 版本信息
  2. docker version
  3. #注意:Yum安装默认安装最新版本,目前最新版本是24.0.7版本。
  4. #docker信息查看
  5. docker info

(4) 镜像加速下载

  1. 浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
  2. mkdir -p /etc/docker
  3. tee /etc/docker/daemon.json <<-'EOF'
  4. {
  5. "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] #写入自己的加速器地址
  6. }
  7. EOF
  8. systemctl daemon-reload #重新加载
  9. systemctl restart docker #重启docker
  10. docker info #查看是否启用了镜像加速

2.Jenkins主节点安装Harbor

(1)安装

  1. #上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中
  2. cd /opt
  3. chmod +x docker-compose
  4. mv docker-compose /usr/local/bin/
  5. #部署 Harbor 服务
  6. tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
  7. vim +5 /usr/local/harbor/harbor.cfg
  8. --5行--修改,设置为Harbor服务器的IP地址或者域名
  9. hostname = 192.168.204.15
  10. cd /usr/local/harbor/
  11. ./install.sh

(2)登录harbor,创建项目

  1. #在 Harbor 中创建一个新项目
  2. (1)浏览器访问:http://192.168.204.15 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
  3. (2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
  4. (3)填写项目名称为“devops03”,点击“确定”按钮,创建新项目

(3) 登录Harbor仓库上传镜像

  1. # docker login -u admin -p Harbor12345 http://192.168.204.15
  2. # docker pull maven
  3. # docker tag maven:latest 192.168.204.15/devops03/devops03-maven-service:1.9.1
  4. # docker push 192.168.204.15/devops03/devops03-maven-service:1.9.1

3.Jenkins从节点安装Docker

(1)YUM安装Docker

目前 Docker 只能支持 64 位系统。

  1. #关闭防火墙和selinux
  2. systemctl stop firewalld.service
  3. setenforce 0
  4. #安装依赖包
  5. yum install -y yum-utils device-mapper-persistent-data lvm2
  6. --------------------------------------------------------------------------------------------
  7. #yum-utils:提供了 yum-config-manager 工具。
  8. #device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
  9. 它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
  10. #device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
  11. --------------------------------------------------------------------------------------------
  12. #设置阿里云镜像源
  13. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  14. #安装 Docker-CE并设置为开机自动启动
  15. yum install -y docker-ce #docker-ce-cli、containerd.io 会作为依赖包被安装
  16. systemctl start docker.service
  17. systemctl enable docker.service

 (2) 查看Docker信息

  1. #查看 docker 版本信息
  2. docker version
  3. #注意:Yum安装默认安装最新版本,目前最新版本是24.0.7版本。

(3) 镜像加速下载

  1. 浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
  2. mkdir -p /etc/docker
  3. tee /etc/docker/daemon.json <<-'EOF'
  4. {
  5. "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] ,
  6. "insecure-registries": ["http://192.168.204.15"]
  7. }
  8. EOF
  9. systemctl daemon-reload #重新加载
  10. systemctl restart docker #重启docker
  11. docker info #查看是否启用了镜像加速

指定私有镜像仓库地址


4.Jenkins流水线操作Harbor仓库

(1)GitLab的maven项目添加Dockerfile

(2) 修改Jenkins流水线代码,在回放中运行

  1. @Library("mylib@master") _
  2. import org.devops.*
  3. def checkout = new Checkout()
  4. def build = new Build()
  5. def unittest = new UnitTest()
  6. def sonar = new Sonar()
  7. pipeline {
  8. agent { label "build"}
  9. options {
  10. skipDefaultCheckout true
  11. }
  12. stages{
  13. stage("Checkout"){
  14. steps{
  15. script {
  16. println("GetCode")
  17. checkout.GetCode("${env.srcUrl}","${env.branchName}")
  18. }
  19. }
  20. }
  21. stage("build"){
  22. steps{
  23. script{
  24. println("Build")
  25. sh "mvn clean package"
  26. }
  27. }
  28. }
  29. stage("UnitTest"){
  30. steps{
  31. script{
  32. println("Test")
  33. unittest.CodeTest("${env.buildTool}")
  34. }
  35. }
  36. }
  37. // stage("Upload"){
  38. // steps{
  39. // script{
  40. // NexusUploadByPlugin("${env.artifactId}",
  41. // "target/maven-test-1.0-SNAPSHOT.jar",
  42. // "${env.type}",
  43. // "${env.groupId}",
  44. // "${env.version}")
  45. // }
  46. // }
  47. // }
  48. stage("DockerBuild"){
  49. steps{
  50. script{
  51. sh """
  52. #登录镜像仓库
  53. docker login -u admin -p Harbor12345 192.168.204.15
  54. #构建镜像
  55. docker build -t 192.168.204.15/${JOB_NAME}:${env.branchName} .
  56. #上传镜像
  57. docker push 192.168.204.15/${JOB_NAME}:${env.branchName}
  58. #删除镜像
  59. sleep 2
  60. docker rmi 192.168.204.15/${JOB_NAME}:${env.branchName}
  61. """
  62. }
  63. }
  64. }
  65. }
  66. }
  67. //NexusUploadByPlugin('devops-test','target/maven-test-1.0-SNAPSHOT.jar','jar','com.jenkins','1.1.2')
  68. def NexusUploadByPlugin(artifactId,file,type,groupId,version ){
  69. nexusArtifactUploader artifacts: [[artifactId: artifactId,
  70. classifier: '',
  71. file: file,
  72. type: type]],
  73. credentialsId: '318df1ad-083b-4158-ac88-2f584446563e',
  74. groupId: groupId,
  75. nexusUrl: '192.168.204.13:8081',
  76. nexusVersion: 'nexus3',
  77. protocol: 'http',
  78. repository: 'mymavenrepo',
  79. version: version
  80. }

(3)Blue Ocean 查看

(4)查看日志

(5)查看Harbor

二、问题

1.Jenkins主节点登录Harbor仓库报错

(1)报错

(2)原因分析

为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现错误。

(3)解决方法

  1. 解决方法:
  2. 1)在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
  3. vim /usr/lib/systemd/system/docker.service --13行--修改为
  4. ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.204.15 --containerd=/run/containerd/containerd.sock
  5. 2)或者修改为
  6. ExecStart=/usr/bin/dockerd --insecure-registry 192.168.204.15
  7. 3)重新加载system并重启docker
  8. systemctl daemon-reload
  9. systemctl restart docker.service

成功:

2.Jenkins流水线里从节点操作docker报错

(1)报错

  1. [Pipeline] sh
  2. + docker login -u admin -p Harbor12345 192.168.204.15
  3. /opt/jenkins03/workspace/devops03/devops03-maven-service@tmp/durable-8e4804f6/script.sh:行3: docker: 未找到命令

(2)原因分析

Jenkins从节点未安装docker

(3)解决方法

从节点安装docker

3.Jenkins流水线里从节点远程登录Harbor仓库报错

(1)报错

操作都是在 Harbor 服务器本地操作没有问题。如果其他客户端登录到 Harbor,就会报如下错误。

  1. [Pipeline] sh
  2. + docker login -u admin -p Harbor12345 192.168.204.15
  3. WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  4. Error response from daemon: Get "https://192.168.204.15/v2/": dial tcp 192.168.204.15:443: connect: connection refused

(2)原因分析

出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

(3)解决方法

方法一解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

  1. vim /usr/lib/systemd/system/docker.service
  2. --13行--修改
  3. ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.204.15 --containerd=/run/containerd/containerd.sock
  4. ExecStart=/usr/bin/dockerd --insecure-registry 192.168.204.15

重启 Docker,再次登录

  1. systemctl daemon-reload
  2. systemctl restart docker

方法二:

创建daemon.json文件,添加配置。

  1. vim /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] ,
  4. "insecure-registries": ["http://192.168.204.15"]
  5. }

重启 Docker,再次登录

  1. systemctl daemon-reload
  2. systemctl restart docker

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/799419
推荐阅读
相关标签
  

闽ICP备14008679号