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、

相关推荐
螺蛳粉 螺蛳粉3 分钟前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
FRing036 分钟前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by2099934 分钟前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河39 分钟前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮1 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻1 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble1 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
猿究院_夏燊1 小时前
MySQL 的四种隔离级别
java·数据库·mysql
huainingning2 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall2 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++