【问题标题】:Can an Azure DevOps pipeline have both templated and non-templated jobs?Azure DevOps 管道是否可以同时具有模板化和非模板化作业?
【发布时间】:2021-07-22 05:04:19
【问题描述】:

我有一个运行一系列阶段的管道 yaml 文件,每个阶段都运行一个已模板化的部署作业。代码本身非常简单:

模板.yaml

jobs:
- deployment: foo
...

管道.yaml

stages:
- stage: Uno
  displayName: Numero_uno
  jobs:
  - job: Foo
    steps:
    - template:  template.yaml
      parameters:
     stuff: things
- stage: Dos
  displayName: Numero_dos
  jobs:
  - job: Foo
    steps:
    - template:  template.yaml
      parameters:
     stuff: things

我发现我的一个阶段需要在其中运行一些额外的脚本,所以我想在这个特定阶段添加一些额外的作业:

- stage: Cuarenta_y_dos
  displayName: Numero_cuarenta_y_dos
  jobs:
  - job: prep
    steps:
    - task: ...
  - job: Foo
    steps:
      - template: template.yaml
        parameters:
          stuff: things
  - job: unprep
    steps:
    - task: ...

这样做会破坏整个管道,因为我的模板是围绕可重复使用的作业构建的,它会立即引发有关“意外值‘作业’”的错误。

我明白为什么会这样,但我不知道如何解决它。我想做的事有可能吗?

【问题讨论】:

    标签: azure-devops yaml azure-pipelines


    【解决方案1】:

    想通了。我的问题有两个:

    1. 我有工作级别的模板,而不是步骤级别的模板
    2. 我在模板化步骤的“jobs:”条目下指定了“-job:”(只有一个作业)。

    原始代码,不起作用:

    stages:
    - stage: Uno
      displayName: Numero_uno
      jobs:
      - job: Foo
        steps:
        - template:  template.yaml
          parameters:
            stuff: things
    
    - stage: Cuarenta_y_dos
      displayName: Numero_cuarenta_y_dos
      jobs:
      - job: prep
        steps:
        - task: ...
      - job: Foo
        steps:
          - template: template.yaml
            parameters:
              stuff: things
      - job: unprep
        steps:
        - task: ...
    

    固定代码:

    stages:
    - stage: Uno
      displayName: Numero_uno
      jobs:
      - template:  template.yaml
          parameters:
          stuff: things
    
    - stage: Cuarenta_y_dos
      displayName: Numero_cuarenta_y_dos
      jobs:
      - job: prep
        steps:
        - task: ...
      - template: template.yaml
        parameters:
          stuff: things
      - job: unprep
        steps:
        - task: ...
    

    这是次要的,但很重要!

    【讨论】:

      【解决方案2】:

      是的,Azure Devops 管道可以同时具有模板化和非模板化作业。更重要的是,引用模板的作业也可以有常规任务。请参见下面的示例:

      stages:
      - stage: CIBuild
        displayName: 'Build'
        jobs:
        - job: Build
          pool:
            vmImage: ubuntu-latest
          steps:
            - task: PowerShell@2
              ...
                 
            - template: PipelineTemplates/ci-template.yml@templates
              parameters: ...
              
        - job: Test
          displayName: 'Test job'
          pool:
            vmImage: ubuntu-latest
          steps:
            - task: PowerShell@2
              ...
      

      我不确定您为什么会遇到这个问题,但您的 .yaml 可能无效。通过点击右上角的点并选择“验证”来检查它是否有效:

      让我们知道结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-13
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2018-09-28
        • 2011-05-26
        • 1970-01-01
        相关资源
        最近更新 更多