2016-11-24 50 views
5

我正在將Jenkins作業從手動配置轉換爲DSL,這意味着我正在嘗試創建一個DSL腳本,以創建今天的作業。使用Jenkins DSL添加參數「構建用於複製神器的選擇器」

作業當前已參數化,其中一個參數的類型爲「構建用於複製工件的選擇器」。我可以在作業XML中看到它是copyartifact插件,特別是我需要使用BuildSelectorParameter。

但是Jenkins DSL API沒有關於使用這個插件來設置參數的指導 - 它只是幫助使用它來創建構建步驟,這不是我所需要的。

我也不能在API的參數選項下找到與此相關的任何內容。

我想在DSL種子腳本中包含一些東西,它會在生成的作業中創建一個與圖片中匹配的參數。

parameter

如果我需要使用配置塊,然後對任何提示將受到歡迎,因爲對於一個初學者來說,這個文件是相當無用的。

回答

3

我發現沒有其他方法來設置構建選擇器參數,但使用配置塊。這是我用來設置它的:

freeStyleJob { 
    ... 
    configure { project -> 
     def paramDefs = project/'properties'/'hudson.model.ParametersDefinitionProperty'/'parameterDefinitions' 
     paramDefs << 'hudson.plugins.copyartifact.BuildSelectorParameter'(plugin: "[email protected]") { 
      name('BUILD_SELECTOR') 
      description('The build number to deploy') 
      defaultSelector(class: 'hudson.plugins.copyartifact.SpecificBuildSelector') { 
       buildNumber() 
      } 
     } 
    } 
} 

爲了達到這個目的,我手動創建了一個帶有構建選擇器參數的作業。然後看着作業的XML配置下詹金斯看相關部分,在我的情況:

<project> 
    ... 
    <properties> 
     <hudson.model.ParametersDefinitionProperty> 
      <parameterDefinitions> 
       ... 
       <hudson.plugins.copyartifact.BuildSelectorParameter plugin="[email protected]" 
        <name>BUILD_SELECTOR</name> 
        <description></description> 
        <defaultSelector class="hudson.plugins.copyartifact.SpecificBuildSelector"> 
         <buildNumber></buildNumber> 
        </defaultSelector> 
       </hudson.plugins.copyartifact.BuildSelectorParameter> 
      </parameterDefinitions> 
     </hudson.model.ParametersDefinitionProperty> 
    </properties> 
    ... 
</project> 

要複製,使用configure條款您需要了解以下幾點:

  • 的配置子句的第一個參數是job節點。
  • 使用/運算符將返回具有給定節點的節點的子節點,如果它不存在則被創建。
  • 使用<<運算符將追加到左側的操作數中作爲右側操作數給出的節點。
  • 創建節點時,您可以在構造函數中爲它指定如下屬性:myNodeName(attrributeName: 'attributeValue')
  • 您可以將lambda傳遞給新節點並使用它來填充其內部結構。
+0

既然問這個問題我已經慢慢想出了配置塊的工作原理,但是這個答案讓我更好地瞭解它是如何組合在一起的 - 所以非常感謝。 – shaneoh

0

我有詹金斯1.6版(帶副本神器插件),你可以做到這一點在DSL這樣的:

job('my-job'){ 
    steps{ 
     copyArtifacts('job-id') { 
      includePatterns('artifact-name') 
      buildSelector { latestSuccessful(true) } 
     } 
    } 
} 

完整的例子:

job('03-create-hive-table'){ 
    steps{ 
     copyArtifacts('seed-job-stash') { 
      includePatterns('jenkins-jobs/scripts/landing/hive/landing-table.sql') 
      buildSelector { latestSuccessful(true) } 
     } 
     copyArtifacts('02-prepare-landing-dir') { 
      includePatterns('jenkins-jobs/scripts/landing/shell/02-prepare-landing-dir.properties') 
      buildSelector { latestSuccessful(true) } 
     } 
     shell(readFileFromWorkspace('jenkins-jobs/scripts/landing/03-ps-create-hive-table.sh')) 
    } 
    wrappers { 
     environmentVariables { 
      env('QUEUE', 'default') 
      env('DB_NAME', 'table_name') 
      env('VERSION', '20161215') 
     } 
     credentialsBinding { file('KEYTAB', 'mycred') } 
    } 
    publishers{ archiveArtifacts('03-create-landing-hive-table.properties') } 
} 
+0

這是將此作爲參數添加嗎?或者將構件複製爲構建中的一個步驟? – shaneoh

+0

我把它作爲一個構建步驟,例如我的整個作業def看起來像這樣(編輯回答) – Babu

+0

行 - 但看看你的例子,我看不到這是如何創建一個參數的構建。它似乎是在創建一個複製構件構建步驟。 – shaneoh

相關問題