【问题标题】:Azure pipeline - continue execution only for specific userAzure 管道 - 仅针对特定用户继续执行
【发布时间】:2020-01-22 16:02:41
【问题描述】:

我有一个具有持续集成的 TFVS 存储库(在签入时触发构建)。

我的问题: 只有在特定用户(或可能是一组用户)签入时,是否有办法继续使用管道(或停止)?如果是这样,如何实现?例如,在极少数情况下,只有某些用户希望他们的更改立即发布到网站上。但是,其他用户会在一天中进行更改,并且这些更改要到稍后才会生效。

看到这个:Azure Dev Ops Pipeline trigger on user? 这似乎是不可能的。我希望有什么办法。

【问题讨论】:

  • 只是检查提供的信息是否有用。如果您需要进一步的帮助,请告诉我们。
  • 我打算试一试,如果我有任何问题,请告诉您 - 非常感谢!
  • 进展如何?如果有任何进展,请告诉我们。
  • 我对这段特定的代码有疑问:$committer= $buildPipeline.value.author.uniqueName | Select-Object -first 1 Write-Host 这是最新的提交者:$committer
  • 当您使用 REST API GET https://dev.azure.com/{organization}/{project}/_apis/tfvc/changesets?api-version=5.1 时,您的接收正文是什么?隐藏您的个人信息。

标签: azure-pipelines


【解决方案1】:

只有在特定用户(或可能是一组用户)签入时,是否有办法继续(或停止)管道?

确实,没有这种只针对特定用户的开箱即用触发器。

作为解决方法,我们可以使用 REST API 从最新的变更集中获取提交者(因为您使用的是 TFVC 存储库):

GET https://dev.azure.com/{organization}/{project}/_apis/tfvc/changesets?api-version=5.1

然后我们可以根据 REST API 返回的值是否等于我们期望的 committer 来设置不同的变量,然后根据变量的值给管道中的其他任务添加条件。

详情:

在管道中,我们可以使用以下脚本添加inline powershell 任务:

$url = "https://dev.azure.com/<OrganizationName>/<ProjectName>/_apis/tfvc/changesets?$top=1&api-version=5.1"
$buildPipeline= Invoke-RestMethod -Uri $url -Headers @{   
 Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get

$committer= $buildPipeline.value.author.uniqueName | Select-Object -first 1

Write-Host This is latest committer: $committer


  if ($committer -like "<SpecificUserAccount>")
    {
      Write-Host "##vso[task.setvariable variable=ImmediatePublish]True"
    }

然后我们根据变量ImmediatePublish的值在这个管道中为其他任务添加自定义条件:

and(succeeded(), eq(variables['ImmediatePublish'], 'True'))

在这种情况下,这个管道会在每次触发器触发时运行,但是只有当提交者是我们所期望的,这个管道才会运行其他真正有意义的任务,否则这个管道只会运行我们的内联 powershell任务,不会对我们的生产产生任何影响。

如果您不希望每次触发器触发时都运行管道,您可以添加一个包含内联 powershell 任务的新管道,然后将此管道添加为 Build completion

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2020-09-22
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多