是否可以在resources:repository的ref属性中为Azure DevOps YAML使用变量?

时间:2019-06-27 16:07:28

标签: azure azure-devops yaml

我有两个AzureDevOps Git分支:

Sub DeleteBadHeaders()

    Dim r As Long, lastRow As Long
    Dim T As Variant
    Dim ws As Worksheet, wsList As Worksheet, f As Range

    Set ws = ActiveSheet

    Set wsList = Worksheets("Headings_To_Delete")
    lastRow = wsList.Cells(Rows.Count, 1).End(xlUp).Row 'last row

    For r = 2 To lastRow
        T = wsList.Cells(r, "A").Value
        If Len(T) > 0 Then
            Set f = ws.Rows(1).Find(what:=T, lookat:=xlWhole)
            'check to see if the heading was found
            If Not f Is Nothing Then
                Debug.Print "Found header '" & T & "' at " & f.Address
                f.EntireColumn.Interior.Color = vbRed  '<< for testing
                'f.EntireColumn.Delete                 '<< uncomment when done testing
            End If   'was found
        End If       'any heading
     Next r          'next in list

End Sub

我有一个用yaml定义的多阶段构建管道,其中一些步骤以模板的形式存储在单独的.yml文件中。

在我的外部azure-pipelines.yml中,我引用了.yml模板所在的存储库:

master
feature/mybranch

当我在'master'分支中构建时,一切都很好,因为默认情况下,存储库将位于refs / heads / master中。

当我在功能分支中工作并且想要测试对模板.yml文件的实验性更改时,我不希望它从master分支中获取它们,而是希望它使用分支中的文件我在工作。

以下作品可以使我做到这一点:

resources:
  repositories:
    - repository: templates
      type: git
      name: MyProject/MyRepo

但是,当我将其合并回master时,显然我不希望'ref:'仍然指向功能分支,因此我想使用变量动态生成'ref:'的值。 / p>

我尝试使用resources: repositories: - repository: templates type: git name: MyProject/MyRepo ref: refs/heads/feature/mybranch ,其中ref: $(Build.SourceBranch)应该扩展为$(Build.SourceBranch)

但是它不起作用。错误:

'refs/heads/feature/mybranch'

3 个答案:

答案 0 :(得分:1)

  

是否可以在的ref属性中使用变量   resources:Azure DevOps YAML的存储库?

对于这个问题,答案是肯定的。

关于为什么收到该错误消息的原因只是您使用的变量($(Build.SourceBranch))不正确。您应该使用$(Build.SourceBranchName)

通常,对于ref,我们应该输入master或任何其他功能分支。如

ref: refs/heads/master

这可能使您认为与$(Build.SourceBranch)的值相同。我知道它看起来一样,但不同。实际上,对于服务器,它将读取确切的分支名称,而不是分支路径,我们可以使用经典的编辑器类型清楚地知道它:

enter image description here

根据经典的编辑器类型,我们可以在这里知道应该输入确切的分支名称。

因此,根据Predefined variables的定义,$(Build.SourceBranch)的值是分支路径,但是对于$(Build.SourceBranchName),它表示的是完全分支名称。

因此,如果要成功执行,则需要使用:$(Build.SourceBranchName)。而且它在我这边工作。

希望这也可以帮助您远离错误消息。

编辑:

为我工作的完整脚本是:

resources:
  repositories:
    - repository: templates
      type: git
      name: MyApp/MyconApp
      ref: $(Build.SourceBranchName)

答案 1 :(得分:0)

The azure docs state

变量不能用于在YAML语句中定义存储库。

因此,这似乎限制了您在此处可以执行的操作。也许有一种解决方法仍然可以让您做自己想做的事情。

答案 2 :(得分:0)

如此处所述,使用内联检出代替引用资源中的资源

https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checking-out-a-specific-ref

- checkout: git://MyProject/MyRepo@features/tools

这个yaml元素允许使用变量,参数等模板表达式。

- checkout: git://$(System.TeamProject)/$(repoName)@${{ variables.branchRef }}

OR

 - checkout: git://$(System.TeamProject)/$(repoName)@${{ parameters.branchRef }}

您可以动态更改