具有多个工件的AzureDevOps发布管道

R4n*_*c1d 5 azure-devops azure-pipelines-release-pipeline

是否可能有一个包含多个工件的发布管道,这些工件会有条件地触发各个阶段。

例:

(Build Artifact 1) 构建标签 Web

(Build Artifact 2) 构建标签 Identity

当我设置发布管道时,我创建了一个管道并添加了

(Build Artifact 1) -> Web Stage

(Build Artifact 2) -> Identity Stage

设置了这两个工件后,会自动触发释放并设置为 After Release

我的问题是,当我(Build Artifact 2)将两个阶段的构建都排队时,将会部署。我只想Identity Stage部署,反之亦然。

我希望所有内容都在一个管道中的原因是因为我的所有工件都包含在一个管道中,我知道如果我创建单独的管道可以做到这一点。

Jos*_*ust 2

进一步考虑您的情况,让第三个工件生成 CI 并在其他 2 个 CI 构建完成时触发,可能会更干净(阅读:没有失败阶段)。该中介构建将根据触发原因(即WebIdentity)进行标记。此构建的工件将是上游工件的重新打包(使用下载工件任务),允许您的发布管道使用可能具有 2 个不同标签值的一个工件。这使您的伪像过滤器在预发布条件下具有更多的牙齿。

Web_CI                            
    \                             #Web - - Web Development - - Web Production
     - -\                        /
         > = WebIdSwitch_CI - - <
     - -/                        \
    /                             #Id - - Id Development - - Id Production
Id_CI

Run Code Online (Sandbox Code Playgroud)

原答案

我对此可能是错的,但我认为您需要根据 中的值运行阶段RELEASE_TRIGGERINGARTIFACT_ALIAS

可能有几种方法可以做到这一点,例如

  1. 发布后为每个工件设置一个缓冲阶段,如果值不正确则让它们失败(将工作阶段移动到其缓冲区之后执行)
  2. 使用新的第一个任务检查作业并失败
  3. 在每个任务上编写一个条件执行选项,以确保如果触发工件不正确,则不会执行任何任务

可以使用管道上的变量$(Release.TriggeringArtifact.Alias)或在 powershell 中使用 来访问该变量$env:RELEASE_TRIGGERINGARTIFACT_ALIAS

我不确定您是否已经在阶段上使用 Artifact Filters 作为预部署条件的一部分,但这可能是另一种方式,而不是一种黑客攻击。我必须将测试管道放在一起并进行尝试。