你如何在Jenkins中将两个不同的构建管道绑在一起?

时间:2012-10-13 02:29:41

标签: jenkins

我在jenkins中有一个构建管道,用于构建和部署公开REST API的后端组件。我有另一个构建管道,用于构建和部署调用后端组件的前端组件。后端和前端组件位于单独的Git存储库中。

每个管道的构建作业在每个相应的Git存储库中发生提交时启动。

我想在每个构建管道的构建管道的末尾运行自动功能测试。但是,我如何知道两个管道都已完成并且应该运行功能测试?它可以将两个管道连接在一起吗?

3 个答案:

答案 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. 根据成功情况有条件地控制测试执行的执行 部署,
  2. 如果您对运行的系统进行任何更改,只需一个作业即可让您重新部署整个系统,然后自动运行测试。
  3. 可能会使用Promotions插件突出显示两个应用程序协同工作的“良好配置”
  4. 然而,管理起来有点棘手。

答案 1 :(得分:1)

虽然这是一个老问题,但您可以考虑使用Build Flow Plugin

重构构建管道

https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin

它的优点是可以将管道逻辑保存在一个地方。

答案 2 :(得分:0)

您可以为此使用build step。假设您有一个名为parentchild的管道。在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