我有一个Jenkins Job接受一个File作为参数并使用相同的文件我想触发下游项目。我该怎么做 ?看来jenkins不支持将文件作为参数传递给下游项目。我正在使用“触发/调用其他项目的构建”来触发下游项目。
答案 0 :(得分:5)
使用Parameterized Trigger Plugin但请注意以下事项:
文件参数帮助显示:
提交文件的名称在环境变量中可用,其名称与文件位置相同。例如,如果您将文件位置设置为
abc.zip[UPLOADED_FILE],则然后$ {abc.zip}[$ {UPLOADED_FILE}] 将为您提供从浏览器传递的原始文件名(例如my.zip。)该名称将不包含目录名称部分。< / p>
[我的删除和补充。]
不幸的是,这在多个方面是错误的(使用Jenkins v1.609.1):
为什么这些都不好?
嗯,后者与内联帮助相反,两者都可能导致意想不到的结果(在我的情况下也是如此),因为&#39;。&#39;和&#39; /&#39;根据{{3}}
,变量名称中不是标准化字符POSIX.1-2008的Shell和Utilities卷中的实用程序使用的环境变量名称仅由大写字母,数字和(&#39; _&#39;)组成[ ...]
另见IEEE Std 1003.1, 2013 Edition:。
所以答案是:
&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,还为其添加了序列化支持。