Azure devops Azure DevOps多级管道YAML:如何签出多个回购?

Azure devops Azure DevOps多级管道YAML:如何签出多个回购?,azure-devops,azure-pipelines,azure-yaml-pipelines,Azure Devops,Azure Pipelines,Azure Yaml Pipelines,MyAzure DevOps管道使用来自两个不同回购协议的yaml模板,配置如下 有一个应用程序存储库,其中包含可部署的应用程序和一个yaml文件—管道的“根”模板 模板存储库。根模板从模板存储库调用其他模板和阶段。然后,此存储库中的模板调用其他模板和脚本(来自同一存储库) 模板存储库作为根模板中的资源引用。我没有找到一种方法,只签出一次模板repo,然后在所有管道阶段使用模板和脚本。目前,我必须在需要使用其他模板或脚本的每个阶段手动克隆repo模板。在每个阶段结束时,Azure Devops将

MyAzure DevOps管道使用来自两个不同回购协议的yaml模板,配置如下

  • 有一个应用程序存储库,其中包含可部署的应用程序和一个yaml文件—管道的“根”模板
  • 模板存储库。根模板从模板存储库调用其他模板和阶段。然后,此存储库中的模板调用其他模板和脚本(来自同一存储库)

  • 模板存储库作为根模板中的资源引用。我没有找到一种方法,只签出一次模板repo,然后在所有管道阶段使用模板和脚本。目前,我必须在需要使用其他模板或脚本的每个阶段手动克隆repo模板。在每个阶段结束时,Azure Devops将清除克隆的回购。有没有一种简单的方法可以只签出一次模板repo,或者以其他方式从子阶段引用其资源?

    我不确定,因为您没有显示YAML文件,但是否使用了签出步骤:

    资源:
    存储库:
    -存储库:devops
    类型:github
    名称:kmadof/devops模板
    端点:kmadof
    步骤:
    -结帐:self
    -结帐:devops
    -脚本:|
    echo$(Build.sources目录)
    ls$(Build.sources目录)*
    -模板:模板/模板。yaml@devops
    参数:
    repo:devops模板
    
    上面的脚本是两份回购协议。在
    devops templates
    中,我有一个模板,用于主构建yaml文件(位于
    self
    repo)

    请再看一看

    编辑

    我对此做了一些工作,并尝试了一些事情。让我来描述文件之间的第一种关系:

    • build.yaml(主回购)
      • templates/start.yml(模板回购-带阶段的模板)
        • 作业一-模板/process.yaml(模板回购)
          • 步骤-模板/other-template.yaml(模板回购)
        • 作业二-直接在start.yaml中定义的步骤
    您不必实际签出模板repo,因为在运行时,所有模板都会被签出并创建构建计划。如果要运行某些脚本(例如powershell脚本),则只需签出模板repo。这是我的yaml文件:

    build.yaml

    资源:
    存储库:
    -存储库:devops
    类型:github
    名称:kmadof/devops模板
    端点:kmadof
    阶段:
    -模板:模板/开始。yaml@devops
    参数:
    repo:devops模板
    构建步骤:
    -结帐:self
    -结帐:devops
    -bash:回声测试#通过
    显示名称:成功
    -bash:echo“测试”
    显示名称:成功
    
    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'
    
    过程码

    参数:
    -名称:'池'
    类型:对象
    默认值:{}
    工作:
    -工作:建造
    池:${{parameters.pool}
    步骤:
    -模板:另一个-template.yaml
    参数:
    repo:devops模板
    
    另一个-template.yaml

    参数:
    -名称:repo#未指定参数的默认值
    默认值:“”
    步骤:
    -pwsh:编写主机“Hello form Other template”
    
    请看这里:

    构建作业使用来自devops template repo的模板,但我不在此作业中签出repo

    你可能想知道为什么我们不能对每个构建进行一次签出。这是因为每个作业可以运行不同的代理

    这里有几个链接:

    最后一句话,当模板从回购中调用文件时,您确实需要使用模板签出回购。例如:

    步骤:
    -任务:PowerShell@2
    投入:
    文件路径:/scripts/myscript.ps1
    
    Hi Krzysztof,谢谢回复。使用这种方法,我在分析管道YAML时遇到了错误:-意外值“stages”我的YAML是这样的:
    参数:param1:“stages:-stage:stage1
    您可能复制粘贴了它,并将步骤与stages混合在一起。请检查我编辑的答案。谢谢,我错过了将步骤传递到模板的可能性。现在很酷。听到这个消息我很高兴。如果你对我有用的话,你能考虑一下我的回答吗?