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

目录

一、实验

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)YUM安装Docker

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

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

(2) 查看Docker信息

bash 复制代码
#查看 docker 版本信息
 docker version
 #注意:Yum安装默认安装最新版本,目前最新版本是24.0.7版本。
 ​
 #docker信息查看
 docker info

(3) 镜像加速下载

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

2.Jenkins主节点安装Harbor

(1)安装

bash 复制代码
#上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中
cd /opt
chmod +x docker-compose
mv docker-compose /usr/local/bin/
 
 
#部署 Harbor 服务
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
 
vim +5 /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.204.15

cd /usr/local/harbor/
./install.sh

(2)登录harbor,创建项目

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

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

bash 复制代码
# docker login -u admin -p Harbor12345 http://192.168.204.15

# docker pull maven

# docker tag maven:latest 192.168.204.15/devops03/devops03-maven-service:1.9.1

# docker push 192.168.204.15/devops03/devops03-maven-service:1.9.1

3.Jenkins从节点安装Docker

(1)YUM安装Docker

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

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

(2) 查看Docker信息

bash 复制代码
#查看 docker 版本信息
 docker version
 #注意:Yum安装默认安装最新版本,目前最新版本是24.0.7版本。

(3) 镜像加速下载

bash 复制代码
 浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
 ​
 mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"]  ,
   "insecure-registries": ["http://192.168.204.15"]

 }
 EOF
 ​
 systemctl daemon-reload      #重新加载
 systemctl restart docker     #重启docker
 ​
 docker info   #查看是否启用了镜像加速

指定私有镜像仓库地址

4.Jenkins流水线操作Harbor仓库

(1)GitLab的maven项目添加Dockerfile

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

bash 复制代码
@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()

pipeline {
    agent { label "build"}

    options {
        skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    sh "mvn clean package"
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        // stage("Upload"){
        //     steps{
        //         script{
        //             NexusUploadByPlugin("${env.artifactId}",
        //                     "target/maven-test-1.0-SNAPSHOT.jar",
        //                                 "${env.type}",
        //                                 "${env.groupId}",
        //                                 "${env.version}")
        //         }
        //     }
        // }
        stage("DockerBuild"){
            steps{
                script{
                    sh """
                        #登录镜像仓库
                        docker login -u admin -p Harbor12345 192.168.204.15
                        
                        #构建镜像
                        docker build -t 192.168.204.15/${JOB_NAME}:${env.branchName} .
                        
                        #上传镜像
                        docker push  192.168.204.15/${JOB_NAME}:${env.branchName}

                        #删除镜像
                        sleep 2
                        docker rmi 192.168.204.15/${JOB_NAME}:${env.branchName}
                        """

                }

            }

        }

    }
}

//NexusUploadByPlugin('devops-test','target/maven-test-1.0-SNAPSHOT.jar','jar','com.jenkins','1.1.2')

def NexusUploadByPlugin(artifactId,file,type,groupId,version ){
    nexusArtifactUploader artifacts: [[artifactId: artifactId,
                                       classifier: '',
                                       file: file,
                                       type: type]],
                          credentialsId: '318df1ad-083b-4158-ac88-2f584446563e',
                          groupId: groupId,
                          nexusUrl: '192.168.204.13:8081',
                          nexusVersion: 'nexus3',
                          protocol: 'http',
                          repository: 'mymavenrepo',
                          version: version
}

(3)Blue Ocean 查看

(4)查看日志

(5)查看Harbor

二、问题

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

(1)报错

(2)原因分析

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

(3)解决方法

bash 复制代码
 
解决方法:
1)在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。 
vim /usr/lib/systemd/system/docker.service --13行--修改为
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.204.15 --containerd=/run/containerd/containerd.sock

2)或者修改为
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.204.15

3)重新加载system并重启docker
systemctl daemon-reload
systemctl restart docker.service

成功:

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

(1)报错

bash 复制代码
[Pipeline] sh
+ docker login -u admin -p Harbor12345 192.168.204.15
/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,就会报如下错误。

bash 复制代码
[Pipeline] sh
+ docker login -u admin -p Harbor12345 192.168.204.15
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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 访问。

bash 复制代码
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.204.15 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.204.15

重启 Docker,再次登录

bash 复制代码
systemctl daemon-reload
systemctl restart docker

方法二:

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

bash 复制代码
 vim /etc/docker/daemon.json 
 {
   "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"]  ,
   "insecure-registries": ["http://192.168.204.15"]

 }

重启 Docker,再次登录

bash 复制代码
systemctl daemon-reload
systemctl restart docker
相关推荐
苹果醋342 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰1 小时前
[linux]docker基础
linux·运维·docker
Jason-河山2 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
lihuhelihu2 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技2 小时前
SAP Business One市场价格解析
运维·sap·erp
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
爱吃喵的鲤鱼2 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
dessler2 小时前
Linux系统-ubuntu系统安装
linux·运维·云计算
向阳12183 小时前
Dubbo负载均衡
java·运维·负载均衡·dubbo