You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Pipelines中实现GitLab CI的before_script/extends功能以避免代码重复

在Azure Pipelines中实现GitLab CI的before_script和extends复用功能

Azure Pipelines虽然没有和GitLab CI完全对等的before_script和extends语法,但可以通过步骤模板、作业模板和extends关键字实现相同效果,同时支持复用镜像、变量等配置。


一、实现类似before_script的前置脚本功能

1. 全局通用前置脚本(所有作业自动执行)

定义一个步骤模板文件,将需要全局执行的前置脚本存入,再在每个作业的步骤中引用该模板:

模板文件 templates/pre-steps.yml:

steps:
  - script: echo "this runs before every job's script commands"
    displayName: "Global Pre-Script"

主流水线文件 azure-pipelines.yml:

stages:
  - stage: Test
    jobs:
      - job: TestCode
        steps:
          - template: templates/pre-steps.yml # 引用前置步骤模板
          - script: echo "run script"
            displayName: "Main Job Script"

2. 单个作业内的前置脚本

若仅需在特定作业前执行脚本,直接将前置步骤放在该作业的steps最前端即可:

stages:
  - stage: Test
    jobs:
      - job: TestCode
        steps:
          - script: echo "this runs before this job's script commands"
            displayName: "Job Pre-Script"
          - script: echo "run script"
            displayName: "Main Job Script"

二、实现类似GitLab CI extends的配置复用功能

Azure Pipelines通过作业模板实现类似隐藏任务的复用,可复用镜像、变量、步骤等所有作业配置:

1. 定义复用的作业模板(类似GitLab的隐藏任务)

创建模板文件 templates/reusable-job.yml,存入需要复用的配置:

parameters:
  jobName: ''
  jobSteps: []

jobs:
  - job: ${{ parameters.jobName }}
    container: python:3.12-bookworm # 复用的镜像
    steps:
      - script: echo "reference this to avoid duplicate yaml code"
        displayName: "Reusable Pre-Script"
      - ${{ each step in parameters.jobSteps }}:
          - ${{ step }}

2. 在主流水线中引用模板(类似extends)

在主流水线文件中通过template关键字引用模板,传入自定义的作业名称和步骤:

stages:
  - stage: Test
    jobs:
      - template: templates/reusable-job.yml
        parameters:
          jobName: TestCode
          jobSteps:
            - script: echo "run script"
              displayName: "Main Job Script"

3. 使用extends关键字复用作业配置

Azure Pipelines也支持extends关键字,可直接继承基础作业的配置再添加自定义内容:

基础作业模板 templates/base-job.yml:

jobs:
  - job: BaseJob
    container: python:3.12-bookworm
    steps:
      - script: echo "reusable pre-script"
        displayName: "Base Pre-Script"

主流水线文件:

stages:
  - stage: Test
    jobs:
      - job: TestCode
        extends:
          template: templates/base-job.yml
          job: BaseJob
        steps:
          - script: echo "run custom script"
            displayName: "Custom Job Script"

内容的提问来源于stack exchange,提问作者0vbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:28:16