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

2024-04-24

我有一个 Jenkins 作业,它接受一个文件作为参数,并使用相同的文件我想触发下游项目。我该怎么做 ?詹金斯似乎不支持将文件作为参数传递给下游项目。我正在使用“触发/调用在其他项目上构建”来触发下游项目。


Use the 参数化触发器插件 https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin但请注意以下事项:

The 文件参数帮助内容如下:

The name of the submitted file is available in the environment variable whose name is the same as file location. For example, if you set the file location to be abc.zip [UPLOADED_FILE], then ${abc.zip} [${UPLOADED_FILE}] would give you the original file name passed from the browser (such as my.zip.) The name will not include the directory name portion.

[删除线和补充是我的。]

Unfortunately this is wrong in more than one respect (with Jenkins v1.609.1):

  • 文件名abc.zip成为环境变量名称是不好的。
  • 如果目录中有目录名部分文件位置现场它is包含在变量的名称中。

为什么这些都是不好的?

好吧,后者与内联帮助相反,两者都可能导致意外结果(在我的例子中就是如此),因为“.”和 '/' 不是变量名称中的标准化字符,根据IEEE 标准 1003.1,2013 年版: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html

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

也可以看看罗伯特·甘布尔的回答Linux 环境变量名称中允许的字符 https://stackoverflow.com/a/2821183/1744774.

所以,答案是:

  • 不要使用路径或扩展名文件参数文件位置,使用例如只是已上传_文件
  • 配置添加构建后操作触发其他项目的参数化构建添加参数预定义参数参数:

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

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

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

    ENV_VAR_IN_DOWNSTREAM_PROJECT=${WORKSPACE}/${UPLOADED_FILE}
    

UPDATE

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以File参数为参数触发下游jenkins作业? 的相关文章

随机推荐