我在jenkins中有一个构建管道,用于构建和部署公开REST API的后端组件。我有另一个构建管道,用于构建和部署调用后端组件的前端组件。后端和前端组件位于单独的Git存储库中。
每个管道的构建作业在每个相应的Git存储库中发生提交时启动。
我想在每个构建管道的构建管道的末尾运行自动功能测试。但是,我如何知道两个管道都已完成并且应该运行功能测试?它可以将两个管道连接在一起吗?
答案 0 :(得分:3)
一种方法是使用Locks and Latches插件并为每个管道上的每个作业提供他们自己的Lock,例如Pipeline-A和Pipeline-B,然后运行测试的作业被配置为获得锁定管道-A和管道-B。如果任一管道的任何部分正在运行,这都会阻止测试作业运行,并在测试运行时阻止管道上的任何更改。
如果您只想锁定部署作业,则可以使用相同的方法,但仅使用锁配置部署作业;这将允许正常构建正常运行,但在测试运行时部署作业队列。
假设;
第二种方法是设置您的作业管道,以便在执行部署之前,它们会在以下布局中触发单个作业;
EndOfPipelineA -> SystemDeploymentController
EndOfPipelineB -> SystemDeploymentController
SystemDeploymentController -> DeployAppOne
SystemDeploymentController -> DeployAppTwo
DeployAppTwo -> TestExecution
DeployAppOne -> TestExecution
然后使用Join插件仅在部署完成且成功时运行TestExecution作业。
第二种方法允许您:
然而,管理起来有点棘手。
答案 1 :(得分:1)
虽然这是一个老问题,但您可以考虑使用Build Flow Plugin
重构构建管道https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin
它的优点是可以将管道逻辑保存在一个地方。
答案 2 :(得分:0)
您可以为此使用build step。假设您有一个名为parent
和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