我的Azure DevOps管道使用来自两个不同存储库的yaml模板,其配置如下。
模板存储库在根模板中被引用为资源。我没有找到一种方法来仅检出模板存储库一次,然后在所有管道阶段使用模板和脚本。现在,我必须在需要使用其他模板或脚本的每个阶段中手动克隆模板存储库。在每个阶段结束时,Azure Devops都会清除克隆的存储库。是否有一种简单的方法可以仅检出模板存储库一次,或者以其他方式从子阶段中引用其资源?
答案 0 :(得分:5)
我不确定,因为您没有显示YAML文件,但是您是否使用了结帐步骤:
resources:
repositories:
- repository: devops
type: github
name: kmadof/devops-templates
endpoint: kmadof
steps:
- checkout: self
- checkout: devops
- script: |
echo $(Build.SourcesDirectory)
ls $(Build.SourcesDirectory) *
- template: templates/template.yaml@devops
parameters:
repo: devops-templates
上面的脚本检查两个存储库。在devops-templates
中,我有用于主版本yaml文件的模板(位于self
存储库中)。
也请看看here
编辑
我对此进行了一些尝试,并尝试了一些方法。让我描述一下文件之间的第一个关系:
您不必实际检出模板存储库,因为在运行时,所有模板都已完成,并且创建了构建计划。如果要运行某些脚本(例如powershell脚本),则仅需要签出模板存储库。这里有我的Yaml文件:
build.yaml
resources:
repositories:
- repository: devops
type: github
name: kmadof/devops-templates
endpoint: kmadof
stages:
- template: templates/start.yaml@devops
parameters:
repo: devops-templates
buildSteps:
- checkout: self
- checkout: devops
- bash: echo Test #Passes
displayName: succeed
- bash: echo "Test"
displayName: succeed
start.yaml
# File: start.yml
parameters:
- name: repo # defaults for any parameters that aren't specified
default: ''
- name: buildSteps # the name of the parameter is buildSteps
type: stepList # data type is StepList
default: [] # default value of buildSteps
stages:
- stage: secure_buildstage
pool: Hosted VS2017
jobs:
- template: process.yaml
parameters:
pool: # this parameter is called `pool`
vmImage: ubuntu-latest # and it's a mapping rather than a string
- job: secure_buildjob
steps:
- script: echo This happens before code
displayName: 'Base: Pre-build'
- script: echo Building
displayName: 'Base: Build'
- ${{ each step in parameters.buildSteps }}:
- ${{ each pair in step }}:
${{ pair.key }}: ${{ pair.value }}
- script: echo This happens after code
displayName: 'Base: Signing'
process.yaml
parameters:
- name: 'pool'
type: object
default: {}
jobs:
- job: build
pool: ${{ parameters.pool }}
steps:
- template: another-template.yaml
parameters:
repo: devops-templates
another-template.yaml
parameters:
- name: repo # defaults for any parameters that aren't specified
default: ''
steps:
- pwsh: Write-Host 'Hello form another template'
构建作业使用devops-template仓库中的模板,但我不在此作业中签出仓库。
您可能想知道为什么我们每次构建都无法进行一次结帐。这是因为每个作业都可以运行不同的代理。
您在这里有几个链接:
最后一句话,当您通过模板从该仓库中调用文件时,确实需要使用模板签出仓库。例如:
steps:
- task: PowerShell@2
inputs:
filePath: /scripts/myscript.ps1