jenkins回滚发布下拉案例1
jenkins回滚发布下拉案例1
1.jenkins配置安装级联的插件
https://jenkins.umi-meta.com/manage/pluginManager/installed
Active Choices
2.创建流水线作业
rollback-meng
https://jenkins.umi-meta.com/view/batch/job/rollback-meng/configure
a.参数化构建过程,第一个环境选项
类型:Active Choices Parameter
名称:UMI_CLUSTER ,主要标识集群环境
Groovy Script 内容,返回对应的环境
return ["dev", "sit", "prod"]Description,描述字段
请选择环境
其他使用默认值
b.参数化构建过程,第二个服务选项
类型:Active Choices Reactive Parameter
名称:UMI_SERVICES ,主要标识集群某个环境下的一个服务
Groovy Script 内容,返回对应环境的服务列表
import java.util.concurrent.TimeUnitdef userName = "root"def devIpAddress = "192.168.10.17"def sitIpAddress = "192.168.10.16"def cluster=UMI_CLUSTERdef ipAddressif (cluster== 'dev') { ipAddress = devIpAddress} else if (cluster== 'sit') { ipAddress = sitIpAddress} else { throw new RuntimeException("Invalid UMI_CLUSTER value: ${cluster}")}def sshCommand = """ ssh ${userName}@${ipAddress} ' helm list --output=json | jq -r ".[].name" '"""def processBuilder = new ProcessBuilder('bash', '-c', sshCommand)processBuilder.redirectErrorStream(true)def process = processBuilder.start()process.waitFor(5, TimeUnit.SECONDS)def result = ''if (process.exitValue() == 0) { result = process.text.trim().tokenize('\n')}return resultDescription,描述字段
请选择服务
依赖值:Referenced parameters
填写:UMI_CLUSTER,依赖环境
其他使用默认值
c.参数化构建过程,第三个tag选项
类型:Active Choices Reactive Parameter
名称:UMI_VERSION ,主要标识集群环境下某个服务对应的tag信息
Groovy Script 内容,返回对应环境下某个服务的tag
import java.util.concurrent.TimeUnitdef userName = "root"def devIpAddress = "192.168.10.17"def sitIpAddress = "192.168.10.16"//def UMI_CLUSTER='dev'def umiService=UMI_SERVICESdef ipAddressif (UMI_CLUSTER == 'dev') { ipAddress = devIpAddress} else if (UMI_CLUSTER == 'sit') { ipAddress = sitIpAddress} else { throw new RuntimeException("Invalid UMI_CLUSTER value: ${UMI_CLUSTER}")}def sshCommand = """ ssh ${userName}@${ipAddress} ' helm history ${umiService} --output=json | jq -r ".[].app_version" '"""def processBuilder = new ProcessBuilder('bash', '-c', sshCommand)processBuilder.redirectErrorStream(true)def process = processBuilder.start()process.waitFor(5, TimeUnit.SECONDS)def result = ''if (process.exitValue() == 0) { result = process.text.trim().tokenize('\n')}return result