如何使用File参数作为参数触发下游jenkins作业?

时间:2015-06-05 12:24:49

标签: jenkins

我有一个Jenkins Job接受一个File作为参数并使用相同的文件我想触发下游项目。我该怎么做 ?看来jenkins不支持将文件作为参数传递给下游项目。我正在使用“触发/调用其他项目的构建”来触发下游项目。

2 个答案:

答案 0 :(得分:5)

使用Parameterized Trigger Plugin但请注意以下事项:

文件参数帮助显示:

  

提交文件的名称在环境变量中可用,其名称与文件位置相同。例如,如果您将文件位置设置为 abc.zip [UPLOADED_FILE],则然后 $ {abc.zip} [$ {UPLOADED_FILE}] 将为您提供从浏览器传递的原始文件名(例如my.zip。)该名称将不包含目录名称部分。 < / p>

[我的删除和补充。]

不幸的是,这在多个方面是错误的(使用Jenkins v1.609.1):

  • 文件名 abc.zip 成为环境变量名称不好。
  • 如果文件位置字段中有目录名称部分,则 包含在变量的名称中。

为什么这些都不好?

嗯,后者与内联帮助相反,两者都可能导致意想不到的结果(在我的情况下也是如此),因为&#39;。&#39;和&#39; /&#39;根据{{​​3}}

,变量名称中不是标准化字符
  

POSIX.1-2008的Shell和Utilities卷中的实用程序使用的环境变量名称仅由大写字母,数字和(&#39; _&#39;)组成[ ...]

另见IEEE Std 1003.1, 2013 Edition:

所以答案是:

  • 请勿在文件参数文件位置中使用路径或扩展程序,例如使用只需 UPLOADED_FILE
  • &lt;您的上游项目&gt; →配置添加构建后操作在其他项目上触发参数化构建添加参数预定义参数参数

      

    KEY =值对,每行一个(Java属性文件格式)。 [...]

         

    当前构建参数和/或环境变量可以使用以下格式:$ {PARAM}或$ PARAM。

    长话短说。这会将文件的绝对名称传递给下游项目:

    ENV_VAR_IN_DOWNSTREAM_PROJECT=${WORKSPACE}/${UPLOADED_FILE}
    

<强>更新

我创建了一个相应的问题:Robert Gamble's answer to Allowed characters in linux environment variable names

答案 1 :(得分:0)

这种方法假设您在当前作业的工作空间中拥有文件。

pipeline
{
    agent any
    stages {
        stage('Pass file type param to build job') {
            steps {
                script {
                    def propertiesFilePath = "${env.WORKSPACE}/sample.properties"
                    build job: 'other-project',
                            parameters: [[$class: "FileParameterValue", name: "propertiesFile", file: new FileParameterValue.FileItemImpl(new File(propertiesFilePath))]]

                }
            }
        }
    }
}

此处,下游/子作业的名称为“ other-project”,此下游/子作业的文件类型参数的名称为“ propertiesFile”。类型FileParameterValue.FileItemImpl是在类FileParameterValue中定义的,并且在詹金斯内部用于处理FileItem,还为其添加了序列化支持。