目录
执行imput步骤会暂停pipeline,直到用户输入参数。这是一种特殊的参数化pipeline的方法。
我们可以利用input步骤实现以下两种场景:
1.实现简易的审批流程。例如,pipeline暂停在部署前的阶段,由负责人点击确认后,才能部署。
2.实现手动测试阶段。在pipeline中增加一个手动测试阶段,该阶段中只有一个input步骤,当手动测试通过后,测试人员才可以通过这个unput步骤
在Jenkinsfile中加入input步骤
steps {
input message:"发布或者停止"
}
若只有message参数,则 input"发布或停止",需要点击按钮,才可以继续。
不管是哪个选项,日志都会记录是谁操作的,对审计很友好
//变量名,用于存储input步骤的返回值
def approvalMap
pipeline {
agent any
stages {
stage('pre deploy') {
steps {
script {
approvalMap = input(
message: '准备发布到哪个环境?',
ok:'确定',
parameters: [
choice(choices:'dev\ntest\nprod', description:'发布到什么环境?', name:'ENV'),
string(defaultValue:'', description:'', name:'myparam')
],
submitter:'admin,admin2,releaseGroup',
submutterParameter:'APPROVER'
)
}
}
}
stage('deploy') {
steps {
echo "操作者是 ${approvalMap['APPROVER']}"
echo "发布到什么环境? ${approvalMap['ENV']}"
echo "自定义参数: ${approvalMap['myparam']}"
}
}
}
}
在pipeline外定义了一个变量approvalMap。这是因为定义在阶段内的变量的作用域只在这个阶段中,而input步骤的返回值需要跨阶段使用,所以需要将其定义在pipeline外。
同时,由于在pipeline中直接使用了Groovy语法赋值表达式,所以需要将approvalMap=input(..) 放到script块中。
input步骤的返回值类型取决于要返回的值的个数。如果只有一个值,返回值类型就是这个值的类型。如果有多个值,返回值类型为Map类型。本实例返回的approvalMap就是一个map。Map的key就是每个参数的name属性,比如EVN,myparam都是key。
除了可以在返回的map中放手动输入的值,还可以放其他数据,比如submintterParameter:'APPROVER'代表将key APPROVER放到返回的map中。
步骤的参数:
approvalMap还有一种定义方式,放在environment中。这样不需要定义顶部变量了。
environment {
approvalMap = ''
}
上游pipeline触发下游pipeline时,并没有自动带上自身的信息。所以,当下游pipeline需要使用上游pipeline的信息时,上游pipeline信息就要以参数的方式传给下游pipeline。比如在上游pipeline中调用下游pipeline时,可以采用以下做法。
build job: 'all-in-one-deploy', parameters: [
string(name:'DEPLOY_ENV', value: "${deploy_env}"),
string(name:'triggerJobName', value:"${env.JOB_NAME}"),
string(name:'triggerJobBuildNumber', value:"${env.BUILD_NUMBER}")
]
input步骤可以与timeout步骤实现超时自动中止pipeline,防止无限等待。以下pipeline一小时不处理就自动终止
steps{
timeout(time:1,unit:'HOURS') {
inout message:"发布或停止"
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章