jenkins集成docker发布java项目

1、创建pipeline流水线任务
2、进入配置选项

选择参数化构建

3、添加2个字符参数,用于传递变量
4、编写pipeline脚本
复制代码
//所有脚本命令都放在pipeline中
pipeline{
	//指定任务再哪个集群节点中执行
    agent any
	//声明全局变量,方便后面使用
	environment {
	   harborAddress = '192.168.118.10'
	   harborRepo = 'library'
	   // 提前在jenkins创建harbor凭据
	   harbor_auth = '4ea966a2-6b0d-4ed9-870a-d6bd8cbebeaa'
	   gitlabRepo = "ssh://git@192.168.118.20:32022/root/tomcat-java-demo.git"
	}
	stages {
		stage('拉取git代码') {
			steps {
			    checkout scmGit(branches: [[name: '$tag']], extensions: [], userRemoteConfigs: [[credentialsId: '44fe4a7f-8cd3-4c65-9695-3820d1863282', url: "${gitlabRepo}"]])
			}
		}
		stage('通过maven构建项目') {
			steps {
				sh '/usr/local/maven/bin/mvn clean package -DskipTests'
			}
		}
    	stage('通过Docker制作自定义镜像') {
    		steps {
    			sh 'docker build -t $JOB_NAME:${tag} -f $WORKSPACE/Dockerfile .'
    		}
    	}
    		
		stage('将自定义镜像推送到Harbor仓库') {
			steps {
			    withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')])
			{	
				sh '''docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/$JOB_NAME:${tag}
				 docker login -u ${username} -p ${password} ${harborAddress}
                 docker push ${harborAddress}/${harborRepo}/$JOB_NAME:${tag}
                 docker rmi -f ${harborAddress}/${harborRepo}/$JOB_NAME:${tag}
                 docker rmi -f ${JOB_NAME}:${tag}'''
			}
		}
	}
		stage('通过Publish Over SSH通知目标服务器') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}
	}
       //基于邮件构建通知   
        post {
        always {
        emailext(subject: '构建通知:${JOB_NAME} - Build # ${BUILD_NUMBER} -${BUILD_STATUS}!',body: '${FILE,path="email.html"}',to: 'xxxx@qq.com')
      }
  }
}
5、编写deploy.sh部署脚本

注意:此脚本需要放到远程执行的/usr/bin/目录下

复制代码
cat <<EOF>/usr/bin/deploy.sh 
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
host_port=$6
container_port=$5
imageName=$harbor_addr/$harbor_repo/$project:$version
containerID=`docker ps -a |grep $project |awk '{print $1}'`

if [ "$containerID" != "" ]; then
     docker stop $containerID
     docker rm $containerID
fi
tag=`docker images |grep $project |awk '{print $2}'`

if [[ "$tag" =~ "$version" ]]; then
     docker rmi $imageName
fi
docker login -u admin -p Tianchu@123 $harbor_addr
docker pull $imageName
docker run -d -p $host_port:$container_port --name $project $imageName &
echo "SUCCESS"
EOF
chmod +x /usr/bin/deploy.sh
6、配置邮箱通知

需提前安装好邮件扩展插件 Email Extension Template Email Extension Plugin

1)在系统配置里面添加邮箱信息

添加系统管理员电子邮件

2)扩展电子邮件配置
3)发件人配置

6、

相关推荐
超级小忍1 分钟前
Maven 常用命令详解
java·开发语言·maven
小白的代码日记29 分钟前
基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
java·spring boot·后端
跟着珅聪学java1 小时前
Java 发送 HTTP POST请求教程
开发语言·lua
重生之我是Java开发战士1 小时前
【C语言】动态内存管理详解
c语言·开发语言·算法
lingling0092 小时前
光伏清洗机器人是什么?艾利特协作机器人如何重塑新能源运维效率
大数据·运维·人工智能
Hello.Reader2 小时前
Rust ⽣成 .wasm 的极致瘦⾝之道
开发语言·rust·wasm
稚肩2 小时前
DHCP 握手原理
开发语言·网络协议
hty622 小时前
Spring Boot 注解式大文件 Excel 导入工具:excel‑import‑spring‑boot‑starter
java
李少兄2 小时前
解决IntelliJ IDEA 项目名称后带中括号问题(模块名不一致)
java·ide·intellij-idea
赵_|大人2 小时前
Qt 自动无法加载数据库为空
开发语言·数据库·qt