Jenkins下游和子项目之间的区别

Abh*_*nav 6 jenkins

我是詹金斯的新手。我见过一些工作还有其他工作作为下游工作。同样,很少有其他工作有其他工作作为子项目。

两者似乎都在做同样的事情(即运行其他作业)。这两种方法有什么区别以及何时使用哪种?

Bor*_*v T 0

我现在首先面临着差异带来的一些后果。

下面的答案是基于我读过的一些材料,所以我不认为它是完整的解释。希望它有帮助!

默认情况下,当使用“构建其他项目”触发构建时”构建后步骤触发构建时,它会自动被视为下游项目。

根据Jenkins官方术语表对下游项目的定义是:

下游已配置的管道或项目,作为单独管道或项目执行的一部分而触发。

不幸的是,这个非常模糊的描述并不完全适合参数化触发器插件的存在作为有效构建步骤

由于两个原因,我使用参数化触发器插件来调用我的其他作业(这是一个简单的自由式项目)。

  1. 原因#1 - 触发/调用/下游作业具有输入参数 - 我无法使用“构建其他项目”构建后步骤传递它们
  2. 原因 #2 - 我需要来自触发/调用/下游作业的工件来完成我的作业的另外 2 个步骤,因此使用构建后步骤对我来说不是一个选择。

我引用“从另一个项目复制工件”构建步骤的“下游构建”选项的工具提示(来自Copy Artifact 插件):

从指定项目的构建下游的构建中复制工件。您可以使用变量表达式。

下游构建是使用文件指纹找到的。也就是说,从构建触发的构建并不总是被视为下游,但您需要对构建中使用的文件进行指纹识别,以便 Jenkins 跟踪它们。

注意:“Downsteram build of”仅适用于基于 AbstractProject 的项目(上游和下游项目)。

基于 AbstractProject 的项目:自由式项目 多配置项目 Maven 项目 非基于 AbstractProject 的项目:管道作业(又名工作流作业)

很有意思!虽然这个解释相当技术性,但我不认为它对我或你有什么帮助。我最终做的是使用该步骤的“特定构建”选项。作为使用此选项所需的内部版本号参数,我使用了参数化触发器插件注入的变量:

TRIGGERED_BUILD_NUMBER_="最后触发的内部版本号"

结论:Jenkins 了解下游项目是什么,但是一些插件(例如参数化触发器插件)以自己的方式执行操作,因此它们以不同的方式处理,我们在将作业链接在一起时必须牢记这一点。