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

PRL*_*obo 2 jenkins

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

Ger*_*ica 5

使用参数化触发器插件但请注意以下事项:

文件参数帮助写着:

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

[我的删除和补充.]

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

  • 成为环境变量名称的文件名abc.zip很糟糕.
  • 如果在一个目录名称部分文件位置字段它包含在变量名.

为什么这些都不好?

好吧,后者与内联帮助相反,两者都可能导致意外结果(在我的情况下也是如此),因为'.' 根据IEEE Std 1003.1,2013 Edition,'/'不是变量名称中的标准字符:

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

另请参阅Robert Gamble对linux环境变量名中允许字符的回答.

所以,答案是:

  • 不要在文件参数文件位置中使用路径或扩展名,例如只使用UPLOADED_FILE
  • <您的上游项目>→ 配置添加构建后操作在其他项目上触发参数化构建添加参数预定义参数参数:

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

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

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

    ENV_VAR_IN_DOWNSTREAM_PROJECT=${WORKSPACE}/${UPLOADED_FILE}
    
    Run Code Online (Sandbox Code Playgroud)

UPDATE

我创建了一个相应的问题:[JENKINS-28996]从文件参数→文件位置创建的环境变量名称包含"目录名称部分",尽管在其内联帮助中有不同的说明