用于 Maven pom 依赖项的 Jenkins 环境变量

Jenkins environment variables for Maven pom dependencies

我们在 jenkins 上有几个工作 运行 相互之间存在层次依赖关系。

比方说,Job2 依赖于 pom.xml 版本的 Job1。 因此,每当我们在 Job1 的 sprint 结束时进行更改时,我们需要在发布 sprint 结束时发布工件之前更改 Job2 内部依赖项的 pom 版本,因此如果我们有 Job3,这可能不方便, Job4、Job5 取决于 Job1 的版本。我们需要在所有依赖它的作业的所有 pom.xml 上更改 Job1 的所有版本。

那么问题来了,有没有办法解决这个问题,可能是使用 jenkins env 变量?需要帮助如何根据上述问题执行它。

谢谢。

您可以使用 jenkins Parameterized Trigger Plugin 将变量传递给下游项目。插件wiki有详细的解释。

由于在 Job1 执行结束时您将拥有所需的版本,因此将其导出为环境变量或将其存储在构建服务器上的某些文件中,例如

pom_version=1.1

现在当触发所有下游作业时,将作业的参数设置为 "pom_version" 并通过此文件选择所需的 key/value 或在预定义参数中设置值。

之后,确保所有下游作业都配置为使用参数 "pom_version"

参数化

因此您在内部开发的工件之间存在依赖关系。在开发过程中,您希望依赖于这些工件的最新快照,但发布版本应依赖于这些相同工件的最新发布版本。

这可以通过 Jenkins 和 Maven 来实现。像这样设置发布构建作业:

  1. 添加类型为 "Invoke top level Maven targets" 的 "Pre Step" 部分。在此步骤中,您 运行 目标 versions:update-properties scm:checkin 更新您的内部依赖项以指向最新版本。
  2. 在主要构建步骤中执行发布:release:prepare release:perform -B。这将构建发布版本,将版本号递增到下一个快照版本,构建下一个快照版本并将其检入 scm。
  3. 在 "Post Step" 运行 目标的 Pre Step 中再次(使用 allowSnapshots=true)更新您的依赖项以引用最新的快照版本。

示例:

注意:为此,所有作业都必须访问同一个 Maven 存储库。在本地 Jenkins 服务器或您的公司 Nexus 上。