持续集成交付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
相关推荐
zhou周大哥1 小时前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
the丶only2 小时前
单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
linux·运维·服务器·docker·gitlab
ccubee2 小时前
docker 安装 ftp
运维·docker·容器
枫叶红花3 小时前
【Linux系统编程】:信号(2)——信号的产生
linux·运维·服务器
yaosheng_VALVE3 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king3 小时前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
启明真纳3 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
苹果醋33 小时前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
TsengOnce4 小时前
Docker 安装 禅道-21.2版本-外部数据库模式
运维·docker·容器
永卿0014 小时前
nginx学习总结(不包含安装过程)
运维·nginx·负载均衡