我在 jenkins 中有一个构建管道,用于构建和部署公开 REST API 的后端组件。我有另一个构建管道,用于构建和部署调用后端组件的前端组件。后端和前端组件位于单独的 Git 存储库中。
当每个相应的 Git 存储库中发生提交时,就会启动每个管道的构建作业。
我想在每个构建管道的构建管道结束时运行自动化功能测试。但是我怎么知道两个管道都已完成并且应该运行功能测试?它可以将两条管道连接在一起吗?
我在 jenkins 中有一个构建管道,用于构建和部署公开 REST API 的后端组件。我有另一个构建管道,用于构建和部署调用后端组件的前端组件。后端和前端组件位于单独的 Git 存储库中。
当每个相应的 Git 存储库中发生提交时,就会启动每个管道的构建作业。
我想在每个构建管道的构建管道结束时运行自动化功能测试。但是我怎么知道两个管道都已完成并且应该运行功能测试?它可以将两条管道连接在一起吗?
一种方法是使用Locks and Latches插件并为每个管道上的每个作业提供自己的锁,例如 Pipeline-A 和 Pipeline-B,然后将运行测试的作业配置为获取 Pipeline-A 和 Pipeline-A 上的锁管道-B。如果任一管道的任何部分正在运行,这既可以防止测试作业运行,也可以在测试运行时阻止管道上的任何更改。
如果您只想锁定部署作业,您可以使用相同的方法,但只需使用锁定配置部署作业;这将允许正常构建正常运行,但在测试运行时部署作业排队。
假设;
第二种方法是设置作业管道,以便在执行部署之前触发以下布局中的单个作业;
EndOfPipelineA -> SystemDeploymentController
EndOfPipelineB -> SystemDeploymentController
SystemDeploymentController -> DeployAppOne
SystemDeploymentController -> DeployAppTwo
DeployAppTwo -> TestExecution
DeployAppOne -> TestExecution
然后,您使用Join插件仅在两个部署都完成且成功时运行 TestExecution 作业。
第二种方法允许您:
但是管理起来有点棘手。
虽然这是一个老问题,但您可以考虑使用 Build Flow Plugin 重构您的构建管道
https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin
它将具有将管道逻辑保存在一个位置的优势。
您可以为此使用构建步骤。假设您有一个名为parent
and的管道child
。在parent
管道中,您可以定义:
pipeline {
agent any
stages {
stage ('call-child-pipeline') {
steps {
build job: 'child'
}
}
}
}
您还可以将一些参数传递给child
管道:
stage ('call-child-pipeline') {
steps {
build job: 'child', parameters: [string(name: 'my_param', value: "my_value")]
}
}
如果您不想等到子管道完成,请添加wait: false
,例如
build job: 'child', wait: false