pipeline 流水线:when 的使用
pipeline 流水线:when 例子说明
- 本次例子实现以下功能:
1, 能够参数化选择发布的环境
2, pipeline脚本中利用参数进行阶段选择
3, 可以选择分支
4, 可以选择部署到开发环境或者提交到测试
5, 提交测试需要填写提测版本号(提测必须填写)
6, 提交测试时,备注配置变化(无变化可以不填写)
添加需要的构建参数
1. 分支参数
2.部署动作参数, Deploy_to_development_environment:部署到开发环境;Summit_the_test:提交镜像给测试。这两个值会在pipeline脚本里提供给when进行判断。
3.提测版本
历史版本:
4.提测配置备注
5.pipeline脚本
脚本说明
pipeline {
agent any
environment {
BUILD_USER = ""
}
tools {
maven 'maven'
jdk 'Oracle_jdk8'
}
// 分支选择,注意BRANCH,与构建参数一致
parameters {
gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH'
}
stages {
stage('准备'){
steps{
script{
//pipeline中的when不能直接调用参数化构建里面的参数。需要进行变量赋值。
ACTION = "${dev_or_test}"
}
}
}
stage('拉代码') {
//when进行判断,若变量ACTION的值是Deploy_to_development_environment,则执行这个步骤。
//Deploy_to_development_environment是参数化构建里面配置好的。
when {
equals expected: 'Deploy_to_development_environment',
actual: ACTION
}
steps {
echo '开始拉取代码.....'
git branch: "${params.BRANCH}", credentialsId: '7XXXXXXXXf0-1de413f5ea29', url: 'http://gitlab.vonedao.com/XXXXXX.git'
}
}
stage('编译打包镜像') {
when {
equals expected: 'Deploy_to_development_environment',
actual: ACTION
}
steps {
echo '开始执行编译打包操作.......'
sh 'mvn clean install -Dmaven.test.skip=true -U'
echo 'Build Docker Image'
sh 'mvn -f ./$JOB_NAME/pom.xml docker:stop docker:remove docker:build docker:push'
}
}
stage('部署到开发环境') {
when {
equals expected: 'Deploy_to_development_environment',
actual: ACTION
}
steps {
echo '开始发布开发环境 .......'
//执行自己编写的shell脚本,进行部署动作
sh '/var/jenkins_home/piplineshell/deploy_dev.sh'
}
}
stage('提交到测试') {
//when进行判断,若变量ACTION的值是Summit_the_test,则执行这个步骤。
//Summit_the_test是参数化构建里面配置好的。
when {
equals expected: 'Summit_the_test',
actual: ACTION
}
steps {
script {
//提测版本号不能为空
if (env.NewVersion) {
//提测版本号不能与历史提测版本号重复
sh '/var/jenkins_home/piplineshell/check_version_.sh'
//利用Jenkins的workspace下面已经拉下git的项目(开发已经部署验证通过了),进行版本号修改,然后编译打包提交给测试。
sh 'mvn versions:set -DnewVersion=${NewVersion} -DupdateMatchingVersions=false'
sh 'mvn -f ./${JOB_NAME}/pom.xml versions:update-child-modules'
sh 'mvn -f ./${JOB_NAME}/pom.xml clean install -Dmaven.test.skip=true -U '
sh 'mvn -f ./$JOB_NAME/pom.xml docker:stop docker:remove docker:build docker:push'
sh 'mvn -f ./$JOB_NAME/pom.xml versions:revert'
//该脚本作用是将本次的新版本号写入对应文件/var/jenkins_home/piplineshell/version_tag/cs-auth
//并且修改yaml文件中的镜像版本号,将最新yaml文件同步到测试环境。
sh '/var/jenkins_home/piplineshell/version_tag.sh'
}
else {
echo 'ERROR : 没有填写提测版本号'
sh 'exit 1'
}
}
// Get build user profile via User Build Vrs plugin
// https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin
//企业微信消息通知
wrap([$class: 'BuildUser']) {
script {
BUILD_USER = "${env.BUILD_USER}"
sh '/var/jenkins_home/piplineshell/sendmessage.sh'
}
}
}
}
}
}
6.执行效果
选择部署动作是部署到开发环境:选择分支,选择Deploy_to_development_environment
点击构建:
选择部署动作是提交到测试环境:选择Summit_the_test,填写版本号,填写变动的配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)