一、简要描述

  • 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管理后台的一个重启链接地址重启。

示例重启链接:http://192.168.95.131:8080/jenkins/restart

图片图片

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发出的部署结果通知

图片

图片

正文到此结束
  • 本文作者:xinyu.he
  • 文章标题:Jenkins Pipeline 全流程实战
  • 本文地址:https://www.hxy.bj.cn/archives/435/
  • 版权说明:若无注明,本文皆Xinyu.he blog原创,转载请保留文章出处。
最后修改:2025 年 06 月 19 日
如果觉得我的文章对你有用,请随意赞赏