pipeline input步驟


一.簡介

執行imput步驟會暫停pipeline,直到用戶輸入參數。這是一種特殊的參數化pipeline的方法。

我們可以利用input步驟實現以下兩種場景:
1.實現簡易的審批流程。例如,pipeline暫停在部署前的階段,由負責人點擊確認后,才能部署。
2.實現手動測試階段。在pipeline中增加一個手動測試階段,該階段中只有一個input步驟,當手動測試通過后,測試人員才可以通過這個unput步驟

在Jenkinsfile中加入input步驟

steps {
    input message:"發布或者停止"
}

若只有message參數,則 input"發布或停止",需要點擊按鈕,才可以繼續。

不管是哪個選項,日志都會記錄是誰操作的,對審計很友好

二.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中調用下游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:"發布或停止"
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM