4

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

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

我想在每个构建管道的构建管道结束时运行自动化功能测试。但是我怎么知道两个管道都已完成并且应该运行功能测试?它可以将两条管道连接在一起吗?

4

3 回答 3

3

一种方法是使用Locks and Latches插件并为每个管道上的每个作业提供自己的锁,例如 Pipeline-A 和 Pipeline-B,然后将运行测试的作业配置为获取 Pipeline-A 和 Pipeline-A 上的锁管道-B。如果任一管道的任何部分正在运行,这既可以防止测试作业运行,也可以在测试运行时阻止管道上的任何更改。

如果您只想锁定部署作业,您可以使用相同的方法,但只需使用锁定配置部署作业;这将允许正常构建正常运行,但在测试运行时部署作业排队。

假设;

  • 任何 Deploy 作业都在触发测试执行

第二种方法是设置作业管道,以便在执行部署之前触发以下布局中的单个作业;

EndOfPipelineA -> SystemDeploymentController
EndOfPipelineB -> SystemDeploymentController
SystemDeploymentController -> DeployAppOne
SystemDeploymentController -> DeployAppTwo
DeployAppTwo -> TestExecution
DeployAppOne -> TestExecution

然后,您使用Join插件仅在两个部署都完成且成功时运行 TestExecution 作业。

第二种方法允许您:

  1. 根据部署的成功有条件地控制测试执行的执行,
  2. 如果您对其运行的系统进行任何更改,则只需一项工作即可重新部署整个系统,然后自动运行测试。
  3. 可能会使用促销插件来突出显示两个应用程序可以很好地协同工作的“良好配置”

但是管理起来有点棘手。

于 2012-10-13T17:49:28.867 回答
1

虽然这是一个老问题,但您可以考虑使用 Build Flow Plugin 重构您的构建管道

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

它将具有将管道逻辑保存在一个位置的优势。

于 2013-05-28T22:14:36.493 回答
0

您可以为此使用构建步骤。假设您有一个名为parentand的管道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
于 2020-05-01T08:40:23.447 回答