pipeline input步骤
阅读原文时间:2023年07月08日阅读:1

目录

执行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中。

步骤的参数:

  • message: input步骤的提示信息
  • submitter(可选) 字符串类型,可以进行操作的用户ID或用户组名,使用逗号分隔,在逗号左右不允许有空格。者在做input步骤的权限控制方面很实用。
  • submitterParameter(可选):字符串类型,保存input步骤的实际操作者的用户名的变量名。
  • ok(可选):自定义确定按钮的文本。
  • parameters(可选):手动输入的参数列表。
  • parameters指令支持的参数类型,input步骤都支持,写法一样

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:"发布或停止"
    }
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器