1、创建pipeline流水线任务
jenkins集成docker发布java项目_docker" style="outline: none;" />
2、进入配置选项
选择参数化构建
jenkins集成docker发布java项目_docker_02" style="outline: none;" />
3、添加2个字符参数,用于传递变量
jenkins集成docker发布java项目_docker_03" style="outline: none;" />
jenkins集成docker发布java项目_docker_04" style="outline: none;" />
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" != "" ]; thendocker stop $containerIDdocker rm $containerID
fi
tag=`docker images |grep $project |awk '{print $2}'`if [[ "$tag" =~ "$version" ]]; thendocker 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)在系统配置里面添加邮箱信息
添加系统管理员电子邮件
jenkins集成docker发布java项目_docker_05" style="outline: none;" />
2)扩展电子邮件配置
jenkins集成docker发布java项目_docker_06" style="outline: none;" />
jenkins集成docker发布java项目_docker_07" style="outline: none;" />
jenkins集成docker发布java项目_Email_08" style="outline: none;" />
3)发件人配置
jenkins集成docker发布java项目_Email_09" style="outline: none;" />
6、