将管道合并为一个



我们有两条管道

管道1:

  • 构建并部署我们代码的一个分支到server1
  • 通过执行dotnet run命令启动.exe

管道2:

  • 从服务器2运行测试脚本,并将请求发送到管道1中服务器1上启动的exe
  • 停止服务器1上的.exe

目标是将这两个管道合并为1,或者单击一次,两个管道都将在管道1开始的位置运行,然后管道2开始。实现这一目标的最佳方式是什么?请注意,由于.exe正在运行,因此管道1并不完整。

一个选项是保持原样,并在管道1中添加步骤,通过REST API 触发管道2

https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0

有了这个机身

{
"definition": {
"id": 217
},
"sourceBranch": "refs/heads/master",
"sourceVersion": "",
"reason": 1,
"demands": [],
"parameters": "{"system.debug":"true"}"
}

(这里有一个如何从powershell任务中做到这一点的例子(

或者使用此扩展触发Azure DevOps管道

您也可以尝试将这两个管道合并为一个使用阶段。要并行运行两个阶段,您需要使它们独立,如下所示:

stages:
- stage: FunctionalTest
jobs:
- job:
...
- stage: AcceptanceTest
dependsOn: []    # this removes the implicit dependency on previous stage and causes this to run in parallel
jobs:
- job:
...

然后,如果触发pipeline,两个阶段都将运行。

第三种选择是使用管道触发器,但对于这种方法,我建议您在第一个管道中创建两个阶段并使用阶段过滤器。

您可以尝试以下解决方法,将2条管道合并为1条。

在管道1中,您可以打开另一个命令终端来启动.exe。例如,在powershell脚本中使用启动进程:

当powershell任务完成执行以下命令时,dotnet run命令将在新的powershell窗口中执行,管道将继续执行以下任务。

Start-Process powershell  -ArgumentList "dotnet run ..."

然后,您可以在目标计算机上添加PowerShell或在管道1中添加SSH部署任务,以在服务器2 上运行测试脚本

参见下面的简单示例:

steps:
- powershell: |
Start-Process powershell -ArgumentList "dotnet run ..."
- task: PowerShellOnTargetMachines@3
inputs:
Machines: 'server2'
UserName: 'userName'
UserPassword: '123456'
InlineScript: |
# Write your powershell commands here.

- powershell: |
Stop-Process -Name processName

如果您已经分别配置和运行了两个管道,并且这是所需的状态,那么就有一个管道完成触发器来触发下一个。可以通过使用管道触发器来做到这一点

resources:
pipelines:
- pipeline: Pipeline1 # Name of the pipeline resource
source: Pipeline1Name # Name of the pipeline referenced by the pipeline resource
trigger: 
branches:
- releases/*
- master

Pipeline1是您的YAML将用来引用管道资源的名称,类似于另一个存储库中的模板。

源将是Azure Devops中定义的管道名称。

最新更新