我有一个模板,其中包含我需要在 Azure DevOps 管道中运行的作业,该模板如下:
jobs:
- job: shell-script-job
steps:
- script: |
set -x
env
pwd
echo "CONTAINER_APP=$(Build.Repository.Name):$(Build.BuildId)" > artifact.txt
source ./artifact.txt
docker save $CONTAINER_APP > container.tar
ls -la
displayName: 'Shell Script: APP'
- job: docker-script-job
steps:
- script: |
echo "CONTAINER_KNEX=$(Build.Repository.Name):$(Build.BuildId)" > artifact-knex.txt
source ./artifact-knex.txt
docker save $CONTAINER_KNEX > container-knex.tar
ls -la
displayName: 'Shell Script: knex'
- job: docker-tasks
steps:
- task: PublishPipelineArtifact@1
displayName: 'Publish Pipeline Artifact - container id: knex'
inputs:
targetPath: artifact-knex.txt
artifact: artifact-knex
- task: PublishPipelineArtifact@1
displayName: 'Publish Pipeline Artifact - container data: knex'
inputs:
targetPath: container-knex.tar
artifact: container-knex
我之前为每个作业使用不同的模板,但我被要求将它们全部放入一个模板中,我需要在管道中单独调用每个作业,因为它们在不同的时间运行。像这样:
- stage: build_dev
dependsOn: quality_control
displayName: Build DEV
condition: or(and(eq(variables.isDev, true), ne(variables['Build.Reason'], 'PullRequest')), eq(variables['Build.Reason'], 'Manual'))
jobs:
- job: Job_build_dev
displayName: Application Build DEV
steps:
- checkout: backend-dev
submodules: true
- script: git rev-parse HEAD
- script: ls -la
- powershell: |
Write-Host "##vso[build.addbuildtag]dev"
displayName: 'Build Tag'
****- template: templates/template_file.yml/shell_script_job****
- task: PublishPipelineArtifact@1
displayName: 'Publish Pipeline Artifact - container id'
inputs:
targetPath: artifact.txt
artifact: artifact
- task: PublishPipelineArtifact@1
displayName: 'Publish Pipeline Artifact - container data'
inputs:
targetPath: container.tar
artifact: container
**** - template: templates/template_file.yml/docker-script-job****
我想做的是在需要作业时单独调用管道中的每个作业,而不是立即调用所有作业,我不确定这是否可以做到,或者我必须找到另一种方法来做到这一点.
我一直在关注Azure文档,尝试了几种调用作业的方法,但我有点迷失:text
我想做的是在需要作业时单独调用管道中的每个作业,而不是立即调用所有作业
根据您的 template.yml,您定义了不同的作业。但是,在您的 main.yml 中,您将工作和任务混合在一起。
main.yml中需要使用相同的级别,可以将任务放在新作业中,或者直接放在模板作业中。
确定级别后,您可以根据需要调用作业。示例代码如下:
Main.yaml:
pool:
vmImage: ubuntu-latest
stages:
- stage: build_dev
jobs:
- job: test_job1
steps:
- bash: echo test job1
- template: template3.yml
parameters:
jobName: 'Job1'
- job: test_job2
steps:
- bash: echo test job2
- template: template3.yml
parameters:
jobName: 'Job2'
- template: template3.yml
parameters:
jobName: 'Job3'
Template.yml内容:
# template.yml
parameters:
- name: 'jobName' # this is a parameter
type: string
jobs:
- job: ${{ format('{0}_{1}', parameters.jobName, 1) }}
condition: eq('${{ parameters.jobName }}', 'Job1')
steps:
- script: echo Running Job1
- job: ${{ format('{0}_{1}', parameters.jobName, 2) }}
condition: eq('${{ parameters.jobName }}', 'Job2')
steps:
- script: echo Running Job2
- job: ${{ format('{0}_{1}', parameters.jobName, 3) }}
condition: eq('${{ parameters.jobName }}', 'Job3')
steps:
- script: echo Running Job3
您需要在模板中使用
${{ format('{0}_{1}', parameters.jobName, 1 }}
作为作业名称,不同的编号1-3
以确保作业名称不会重复。
执行结果: