Jenkins自动部署服务(四):docker镜像上传到harbor仓库

实验环境

Jenkins主机:
名称          版本
centos        7
java        1.8.0_45
maven        3.5.2
git         1.8.3.1
jenkins     2.190.1
docker       1.13.1

harbor仓库主机:
IP地址:192.168.14.212
用户和密码:admin/123456
harbor版本:1.8.0(建议版本1.7以上)

执行过程:mvn构建,dockerfile:build生成镜像,docker停止、删除、上传镜像到harbor

一、jenkins主机登录harbor仓库

可以使用docker自带的Registry仓库,这里为了方便管理使用了harbor

harbor安装查看https://blog.csdn.net/tladagio/article/details/96864759

1、登录显示报错

2、在/etc/docker/daemon.json加入harbor仓库地址

3、重启docker

[root@jenkins3 ~]# systemctl restart docker

4、再次登录成功

二、Harbor配置

1、新建一个项目

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第1张图片

2、输入项目名称(这里只是演示,所以选择公开)

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第2张图片

3、现在harbor镜像为空

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第3张图片

三、Pipeline脚本

1、编辑脚本

pipeline {
    agent any
    environment { 
		def imageName = "${group_id}/${single_project_name}"
		def tag="latest"
    }
    parameters {
        string(name:'group_id', defaultValue: 'harbor', description: '项目groupId')
        string(name:'maven_name', defaultValue: 'maven-3.5.2', description: '全局工具配置maven的名称')
		string(name:'registry_url', defaultValue: '192.168.14.212', description: '镜像仓库地址')
		string(name:'port', defaultValue: '8761', description: '部署镜像端口')
    }
	// 注册工具
    tools { 
        maven "${params.maven_name}"
    }	
    stages {
		// 获取或更新最新代码
        stage('check out') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], ...
            }
        }
		// maven 编译依赖项目
        stage('build dependence') {
            steps {
                script {
					sh '''
					mvn -f ***-common-pom  clean install -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true
					mvn -f ***-common-lib  clean install -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true
					'''	
				}  
            }
        }
		// 本地镜像删除(如果存在)、生成新镜像
        stage('build images') {
            steps {
                script {
					sh '''
					containerStr=`docker ps -a | grep -w ${imageName} | awk '{print $1}'`
					imageStr=`docker images | grep -w $imageName  | awk '{print $3}'`
					echo "container id:$containerStr"
					echo "image id:$imageStr"
					
					if [ "$imageStr" !=  "" ] ; then
						if [ "$containerStr" !=  "" ] ; then
							#停掉容器
							docker stop `docker ps -a | grep -w ${imageName}  | awk '{print $1}'`
						
							#删除容器
							docker rm `docker ps -a | grep -w ${imageName}  | awk '{print $1}'`
						
							#删除镜像
							docker rmi --force ${imageName}
						else
							 #删除镜像
							docker rmi --force ${imageName}
						
						fi
					fi
					
					mvn -f ${single_project_name}  clean install dockerfile:build -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true
					'''	
				}	
                    
            }
        }
        //删除仓库老镜像、重命名镜像、上传重命名新镜像
        stage('upload image') {
            steps {
                script {
					sh '''
						#(1)判断本地是否已存在该项目的镜像,存在则先删除
						regName=${registry_url}/$imageName
						imageStr=`docker images | grep -w $regName  | awk '{print $3}'`
						if [ "$imageStr" !=  "" ] ; then
							#将仓库中的镜像名称删除
							docker rmi ${registry_url}/${imageName}:$tag
						fi

						#(2)必须要先将镜像的名称给变成  域名或ip/镜像名
						docker tag ${imageName}:${tag} ${registry_url}/$imageName

						#(3)删除本地镜像
						docker rmi $imageName:${tag}

						#(4)推送到远程harbor的仓库上,并删除本地记录
						docker push ${registry_url}/$imageName

						docker rmi ${registry_url}/${imageName}:$tag
						
					'''	
				}
			}
		}
    }
}

2、parameters字符参数(可选查看,这些参数pipeline脚本已经定义)

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第4张图片

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第5张图片

3、开始构建

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第6张图片

四、Harbor镜像仓库

1、构建成功之后,查看harbor添加了一个镜像

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第7张图片

2、至此docker镜像上传成功

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第8张图片

3、点入镜像可以查看镜像构建历史

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第9张图片

4、镜像名称规则受到pom.xml和docker重命名控制

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第10张图片

Jenkins自动部署服务(四):docker镜像上传到harbor仓库_第11张图片

 

你可能感兴趣的:(jenkins)