一、简要描述
- Pipeline-拉取Git代码操作
- Pipeline-Maven构建项目
- Pipeline-Sonarqube检测代码质量
- Pipeline-通过Docker制作自定义镜像
- Pipeline-推送镜像到harbor
- Pipeline-通知目标服务器部署项目
- Pipeline-构建后钉钉通知消息
二、Pipeline-拉取Git代码操作
1、Jenkins项目构建详情,进入配置详情

2、添加参数化构建过程,增加Git参数,根据tag版本部署


3、进入流水线语法

4、在流水线脚本片段生成器中,选择Git流水脚本的生成

5、填写项目Git相关信息


6、Git信息填写完成,生成流水线脚本

7、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
key = 'value'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
echo '通过maven构建项目 - SUCCESS'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
echo '通过Sonarqube做质量检测 - SUCCESS'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
echo '通过Docker制作自定义镜像 - SUCCESS'
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
echo '通过Publish Over SSH通知目标服务器 - SUCCESS'
}
}
}
}
8、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

9、查看构建日志


三、Pipeline-Maven构建项目
1、进入流水线语法

2、在流水线脚本片段生成器中,选择shell脚本

3、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
key = 'value'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
echo '通过Sonarqube做质量检测 - SUCCESS'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
echo '通过Docker制作自定义镜像 - SUCCESS'
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
echo '通过Publish Over SSH通知目标服务器 - SUCCESS'
}
}
}
}
4、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

5、查看构建日志


四、Pipeline-Sonarqube检测代码质量
1、进入流水线语法

2、在流水线脚本片段生成器中,选择shell脚本

3、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
- -Dsonar.sources:被扫码的源码目录
- -Dsonar.projectname:项目名称
- -Dsonar.projectKey:项目key,一般与项目名称一致即可
- -Dsonar.java.binaries:项目编译后的字节码
- -Dsonar.login:Sonarqube用户登录授权token
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
key = 'value'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
echo '通过Docker制作自定义镜像 -SUCCESS'
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
echo '通过Publish Over SSH通知目标服务器 - SUCCESS'
}
}
}
}
4、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

5、查看构建日志


6、在Sonarqube管理后台,查看代码质量检查报告


五、Pipeline-通过Docker制作自定义镜像
1、进入流水线语法

2、在流水线脚本片段生成器中,选择shell脚本

3、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
key = 'value'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ sonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
sh '''cp -rf target/*.jar docker/
docker build -t ${JOB_NAME}:$tag docker/'''
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
echo '通过Publish Over SSH通知目标服务器 - SUCCESS'
}
}
}
}
4、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

5、查看构建日志


6、在宿主机查看构建的docker镜像
$ docker images | grep jenkins
六、Pipeline-推送镜像到harbor
1、进入流水线语法

2、在流水线脚本片段生成器中,选择shell脚本
2.1、在Java项目工程Jenkinsfile文件定义环境变量
// 声明全局变量,方便后面使用
environment {
// harbor用户名
harborUserName = 'DevOps'
// harbor密码
harborPassword = 'Dev12345'
// harbor地址
harborAddress = '192.168.95.131:9020'
// harbor项目名
harborRepo = 'repos'
}
2.2、定义shell脚本,生成流水线脚本

3、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
// harbor用户名
harborUserName = 'DevOps'
// harbor密码
harborPassword = 'Dev12345'
// harbor地址
harborAddress = '192.168.95.131:9020'
// harbor项目名
harborRepo = 'repos'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
sh '''cp -rf target/*.jar docker/
docker build -t ${JOB_NAME}:$tag docker/'''
}
}
stage ('将自定义镜像推送到Harbor') {
steps {
sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
echo "通过Publish Over SSH通知目标服务器 -SUCCESS"
}
}
}
}
4、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

5、查看构建日志


6、登录Harbor管理后台查看推送的镜像



七、Pipeline-通知目标服务器部署项目
1、进入流水线语法

2、Jenkins项目配置详情,增加端口port字符参数


3、在流水线脚本片段生成器中,选择sshPublisher脚本


4、在Java Springboot项目工程中,复制生成好的流水线脚本到Jenkinsfile文件中,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
// harbor用户名
harborUserName = 'DevOps'
// harbor密码
harborPassword = 'Dev12345'
// harbor地址
harborAddress = '192.168.95.131:9020'
// harbor项目名
harborRepo = 'repos'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
sh '''cp -rf target/*.jar docker/
docker build -t ${JOB_NAME}:$tag docker/'''
}
}
stage ('将自定义镜像推送到Harbor') {
steps {
sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName:'192.168.95.131', transfers: [sshTransfer(cleanRemote:false, excludes:'',
execCommand:"sh /usr/local/deploy/docker/deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $port",
execTimeout:120000, flatten:false, makeEmptyDirs:false, noDefaultExcludes:false, patternSeparator:'[, ]+', remoteDirectory:'', remoteDirectorySDF:false, removePrefix:'', sourceFiles:'')], usePromotionTimestamp:false, useWorkspaceInPromotion:false, verbose:false)])
}
}
}
}
5、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

6、查看构建日志


7、部署的服务器,查看Docker部署启动的Springboot应用服务
$ docker ps | grep jenkins
8、浏览器访问部署的Springboot应用服务
示例访问链接:http://192.168.95.131:8082/sayHello

八、Pipeline-构建后钉钉通知消息
- 钉钉官方文档
自定义机器人接入 - 钉钉开放平台

- 钉钉DingTalk插件文档
快速开始 | 钉钉机器人插件

1、登录Jenkins管理后台,安装钉钉插件


2、安装完Jenkins插件,重启Jenkins服务
可以访问Jenkins管理后台的一个重启链接地址重启。


3、创建钉钉消息接收群

4、添加钉钉群智能群助手
钉钉机器人-安全设置-自定义关键词:Jenkins部署
机器人Webhook地址:https://oapi.dingtalk.com/robot/send?access\_token=xxxx
4.1、群设置

4.2、选择添加机器人

4.3、选择自定义-通过Webhook接入自定义服务

4.4、填写机器人信息


4.5、生成钉钉机器人Webhook链接地址

4.6、钉钉群组机器人创建成功

5、登录Jenkins管理后台,配置钉钉机器人信息
5.1、Jenkins系统管理->系统配置

5.2、配置钉钉机器人信息

6、在Java Springboot项目工程中,在Jenkinsfile文件中,编写钉钉流水线脚本,并提交到Gitlab仓库中
6.1、在Jenkinsfile文件中,编写钉钉流水线脚本,并提交到Gitlab仓库中
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务再哪个集群节点中执行
agent any
// 声明全局变量,方便后面使用
environment {
// harbor用户名
harborUserName = 'DevOps'
// harbor密码
harborPassword = 'Dev12345'
// harbor地址
harborAddress = '192.168.95.131:9020'
// harbor项目名
harborRepo = 'repos'
}
stages {
stage ('拉取git仓库代码') {
steps {
checkout([$class:'GitSCM', branches: [[name:'${tag}']], extensions: [], userRemoteConfigs: [[credentialsId:'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url:'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
}
}
stage ('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage ('通过Sonarqube做质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
}
}
stage ('通过Docker制作自定义镜像') {
steps {
sh '''cp -rf target/*.jar docker/
docker build -t ${JOB_NAME}:$tag docker/'''
}
}
stage ('将自定义镜像推送到Harbor') {
steps {
sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
}
}
stage ('通过Publish Over SSH通知目标服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName:'192.168.95.131', transfers: [sshTransfer(cleanRemote:false, excludes:'',
execCommand:"sh /usr/local/deploy/docker/deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $port",
execTimeout:120000, flatten:false, makeEmptyDirs:false, noDefaultExcludes:false, patternSeparator:'[, ]+', remoteDirectory:'', remoteDirectorySDF:false, removePrefix:'', sourceFiles:'')], usePromotionTimestamp:false, useWorkspaceInPromotion:false, verbose:false)])
}
}
}
post {
// 构建成功通知
success {
dingtalk (
robot:'Dingding-robot',
type:'MARKDOWN',
title:"success: ${JOB_NAME}",
text: ["- 构建成功: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
)
}
// 构建失败通知
failure {
dingtalk (
robot:'Dingding-robot',
type:'MARKDOWN',
title:"fail: ${JOB_NAME}",
text: ["- 构建失败: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
)
}
}
}
6.2、Jenkins中还有非常多的全局变量可以使用,可以Jenkins项目配置中进入查看


7、在Jenkins管理后台,进入项目部署详情,立即构建测试部署

8、查看构建日志,钉钉收到Jenkins发出的部署结果通知

