azure-devops - Azure Pipelines 如何为 "Manual only"触发版本过滤每个阶段的工件

标签 azure-devops azure-pipelines azure-pipelines-release-pipeline

假设我有这 3 个阶段:Dev、QC、Prod。

我的要求是:

  1. 只能将来自特定分支(release/*)的工件部署到 QC/Prod
  2. 所有分支的工件都可以部署到 Dev

我可以使用 Artifact 过滤器 实现我想要的“阶段后”触发版本,但我需要这个用于“仅手动”。

是否有一种解决方法可以让我控制/过滤哪些工件可用于特定阶段/环境的部署?

enter image description here

基本上,我需要相当于 Octopus Channels 的 Azure DevOps .

更新
我想我已经接近解决方案了。
在“预部署条件”中,我可以添加一个新的 Deployment Gate,它可以调用 Rest API。 例如 URL suffix=/Release/releases/76

现在,我只需要正确解析 ApiResponse,因为下面的成功标准不起作用

eq(root['artifacts[0].definitionReference.branch.id'], 'refs/heads/master')

Evaluation of expression 'eq(root['artifacts[0].definitionReference.branch.id'], 'refs/heads/master')' failed.

最佳答案

如您所说,您可以在阶段上使用部署门来执行此操作。

  1. 从项目设置 -> 管道 -> 服务连接创建一个新的通用服务连接。
    对于服务 URL,类似于 https://vsrm.dev.azure.com/{OrgName}/{ProjectName}/_apis

  2. 在您的舞台上,打开预部署条件

  3. 启用 Gates 选项。

  4. 添加一个新的调用 REST API 门并将评估前延迟设置为 0 分钟。
    4.1 设置连接类型为Generic。
    4.2 选择您在步骤 1 中创建的服务连接。
    4.3 设置方法为GET。
    4.4 设置URL后缀为/Release/releases/$(Release.ReleaseId)
    4.5 在 Advanced 区域,将 Completion Event 设置为 ApiResponse。
    4.6 在高级区域,将成功标准设置为(或startsWith)
    eq(root['artifacts'][0]['definitionReference']['branch']['id'],'refs/heads/master')

现在,如果您尝试部署不是来自 master 分支的工件,部署将会失败

关于azure-devops - Azure Pipelines 如何为 "Manual only"触发版本过滤每个阶段的工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56612890/

相关文章:

azure - DevOps 变量组

python-3.x - 使用文件向 Common Data Service 发出 PATCH 方法请求

azure-devops - Azure 管道 : Parallel tasks inside single job in pipeline

git - 推送代码时自动构建 VSTS

azure - 路径 "/home/vsts/work/1/s/javapipetest13/Orchestration/dev/deployment.yaml"不存在

azure - 有没有办法使用 Azure Devops 将 yaml 构建管道转换为发布管道?

visual-studio - Azure DevOps-是否可以计划特定日期和时间的发布?

json - Azure 管道 : Read values from json file in the repo and store it in pipeline variable (without powershell)

azure-devops - 是否可以在 VSTS 上为不同环境(阶段)共享任务?

azure-devops - Team Foundation Service 是否有内置的 Wiki?