Mar*_*otH 7 yaml azure azure-devops
我有两个 AzureDevOps Git 分支:
master
feature/mybranch
Run Code Online (Sandbox Code Playgroud)
我在 yaml 中定义了一个多阶段构建管道,其中一些步骤被模板化为单独的 .yml 文件。
在我的外部 azure-pipelines.yml 中,我引用了我的模板 .yml 所在的存储库:
resources:
repositories:
- repository: templates
type: git
name: MyProject/MyRepo
Run Code Online (Sandbox Code Playgroud)
当我在“master”分支中构建时,一切都很好,因为默认情况下,存储库将在 refs/heads/master 中查找。
当我在功能分支中工作并且我想测试我的模板 .yml 文件的实验性更改时,我不希望它从主分支中获取它们,我希望它使用我正在工作的分支中的文件在。
以下工作并允许我这样做:
resources:
repositories:
- repository: templates
type: git
name: MyProject/MyRepo
ref: refs/heads/feature/mybranch
Run Code Online (Sandbox Code Playgroud)
但是,当我将其合并回 master 时,我显然不希望 'ref:' 仍然指向功能分支,因此我想使用变量动态生成 'ref:' 的值。
我试过使用ref: $(Build.SourceBranch)
where $(Build.SourceBranch)
should expand to'refs/heads/feature/mybranch'
但它不起作用。错误:
62638: "/azure-pipelines.yml: Could not get the latest source version for repository MySolution hosted on Azure Repos using ref refs/heads/$(Build.SourceBranch)."
Run Code Online (Sandbox Code Playgroud)
不要在资源中引用 repo,而是按照此处所述使用内联结帐
- checkout: git://MyProject/MyRepo@features/tools
Run Code Online (Sandbox Code Playgroud)
这个 yaml 元素允许使用使用变量、参数的模板表达式,例如
- checkout: git://$(System.TeamProject)/$(repoName)@${{ variables.branchRef }}
Run Code Online (Sandbox Code Playgroud)
或者
- checkout: git://$(System.TeamProject)/$(repoName)@${{ parameters.branchRef }}
Run Code Online (Sandbox Code Playgroud)
你可以动态改变它
或者另一种选择是使用脚本任务如下
- script: |
# note checkout: git://$(System.TeamProject)/${{ parameters.repoName }}@${{ parameters.repoRef }} this does not work if this task is run multiple times in same pipeline
# see here for more details :https://developercommunity.visualstudio.com/t/checkout-fails-with-an-error-occurred-while-loadin/1005991#T-N1270459
repoDir=$(Agent.BuildDirectory)/${{ parameters.repoName }}
/bin/rm -rf $repoDir
git clone https://$(System.AccessToken)@$(System.CollectionUri)/$(System.TeamProject)/_git/${{ parameters.repoName }} $repoDir
cd $repoDir
git fetch origin '${{ parameters.repoRef }}':'localBranch'
git checkout localBranch
name: clone_script
displayName: Checkout using script ${{ parameters.repoName }}@${{ parameters.repoRef }}
Run Code Online (Sandbox Code Playgroud)
是否可以在 Azure DevOps YAML 的 resources:repository 的 ref 属性中使用变量?
对于这个问题,答案是肯定的,有可能。
关于为什么您收到该错误消息,只是$(Build.SourceBranch)
您使用的变量()不正确。你应该使用$(Build.SourceBranchName)
.
通常,对于 ref,我们应该输入 master 或任何其他功能分支。例如
ref: refs/heads/master
Run Code Online (Sandbox Code Playgroud)
这可能会让您认为这与 的值相同$(Build.SourceBranch)
。我知道,它看起来一样,但又不同。事实上,对于服务器来说,它会读取准确的分支名称而不是分支路径,我们可以使用经典的编辑器类型清楚地弄清楚这一点:
根据经典的编辑器类型,我们可以知道这里应该输入准确的分支名称。
因此,正如预定义变量所定义的那样, 的值$(Build.SourceBranch)
是分支路径,但对于$(Build.SourceBranchName)
,它代表了一个确切的分支名称。
所以,如果你想执行成功,你需要使用 : $(Build.SourceBranchName)
。这对我来说很有效。
希望这也能帮助您远离错误消息。
编辑:
对我有用的完整脚本是:
resources:
repositories:
- repository: templates
type: git
name: MyApp/MyconApp
ref: $(Build.SourceBranchName)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3412 次 |
最近记录: |