2016-11-24 52 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

相关问题