一千萬個為什麽

搜索

添加新參數時如何不破壞Jenkins管道(聲明性管道)



我一直在努力解決的問題是每當我向Jenkins管道添加新參數時,下一個作業將無法正確獲取此參數。 如果某些管道程序(如確定代理程序)需要這些參數,則這尤其成問題。 這個問題進一步令人沮喪,因為在已經存在的作業中,當默認參數被更改時,新作業仍將使用舊作業;但是在創建一份新工作時,它不需要任何工作。

為了從第一次運行作業中解決參數問題,並且還要解決已經運行的作業的參數更改參數,我們需要一個解決方案。 (目前,我有一個解決方法,我將其作為答案發布,但我想知道是否有更好的解決方案)

轉載註明原文: 添加新參數時如何不破壞Jenkins管道(聲明性管道)

一共有 1 個回答:

這是一個解決方案,看起來幾乎像我找到的解決方法,它適用於聲明性管道。

首先,我們需要在進入 pipeline {} 部分之前在文件的開頭添加一些代碼。我們添加的代碼將在管道部分之前運行,並將檢查env/param是否存在,如果它存在將取值,否則我們將給它一個默認值並將其分配給我們可以在管道期間訪問的變量。然後我們需要將管道代碼引用從參數更改為變量。

下面是一個定義任意參數的示例,以及要使用的代理標簽。如您所見,變量可以在階段期間以及在確定代理程序等過程中使用。

def MY_VARIABLE = null
if (env.my_parameter) {
  MY_VARIABLE = env.my_parameter
} else {
  MY_VARIABLE = "my default value"
}
echo "MY VARIABLE IS SET: ${MY_VARIABLE}"

def MY_AGENT = null
if (env.my_agent) {
  MY_AGENT = env.my_agent
} else {
  MY_AGENT = "agent_label"
}
echo "MY AGENT IS SET: ${MY_AGENT}"

pipeline {
    parameters {
        string(defaultValue: "my default value", description: 'This is my parameter', name: 'my_parameter') ;
        string(defaultValue: "agent_label", description: 'This is my agent label', name: 'my_agent') ;
    }
    agent {
      label "${MY_AGENT}"
    }
    stages {
        stage('my stage') {
            steps {
                sh 'echo ${MY_VARIABLE}'
            }
        }
    }
}