2017-08-02 41 views
4

我想一個dynamic choice parameter添加到Jenkinsfile與聲明語法,使用這樣的事情:(當Jenkinsfile處理)選擇參數動態評估

def myChoices = listBranchesFromGithub(MY_REPO) 

pipeline { 
    parameters { 
     choice(name: 'mychoice', choices: myChoices) 
    } 
} 

listBranchesFromGithub(MY_REPO)計算一次,不是每次運行這個工作。

每當作業被觸發時,是否有辦法填充choices

+0

您是否曾想到這一點? – Mike

+0

不,這個插件不再被分發,所以它不太可能在jenkins 2中被支持。也許[Extended choice parameter](https://wiki.jenkins.io/display/JENKINS/Extended+Choice+Parameter+plugin)plugin [可以做類似的事情](https://stackoverflow.com/a/46122406/2029354),但只能使用腳本管道(而不是聲明式)和[它在藍色海洋中播放不好](https://gist.github .com/jgraglia/44a7443847cff6f0d87387a46c7bb82f#gistcomment-2158077) – Albert

回答

0

您有兩種選擇。

在您的jenkins文件中,處理後再次調用屬性。

#!groovy 
@Library('shared') _ 

properties() 

// Do pipeline 

properties() 

def properties() { 
    // Set Jenkins job properties 
    properties([ 
     buildDiscarder(logRotator(numToKeepStr: '20')), 
     parameters([//params]) 
    ]) 
} 

親的,簡單嗎?缺點:只有在步驟成功並且不提前退出時纔有效。

替代方案:在構建期間動態調整(我們將這些函數放在共享庫中,並在我們需要更新參數(如工件列表)時調用它們)。注意:可能需要腳本安全審批

/** 
* Change param value during build 
* 
* @param paramName new or existing param name 
* @param paramValue param value 
* @return nothing 
*/ 
def setParam(String paramName, String paramValue) { 
    List<ParameterValue> newParams = new ArrayList<>(); 
    newParams.add(new StringParameterValue(paramName, paramValue)) 
    $build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams)) 
} 

/** 
* Add a new option to choice parameter for the current job 
* 
* @param paramName parameter name 
* @param optionValue option value 
* @return nothing 
*/ 
def addChoice(String paramName, String optionValue) { 
    addChoice($build().getParent(), paramName, optionValue) 
} 

在上述情況下,這些方法存在於共享庫內的/ vars中。 /vars/jobParams.groovy。因此,從Jenkinsfile或其他共享庫中,可以使用以下語法調用這些文件:

jobParams.addChoice("ARTIFACT_NAME", "da-name") 
+0

您是否以某種方式從Jenkinsfile調用setParam()和addChoice()? –

+0

如果是這樣,怎麼樣?你能提供一個Jenkinsfile的例子,詳細說明如何做到這一點? –

+0

是的,所以setParam()和addChoice()存在於/ vars(/vars/jobParams.groovy)下的另一個共享庫中。從jkinskins文件或其他共享庫只需調用jobParams.addChoice(「ARTIFACT_NAME」,「the name」)即可 – metalisticpain