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

如何在Azure Pipeline中获取任务结果变量并检查Docker镜像推送状态?

解决方案

1. 添加镜像检查步骤(失败时终止流水线)

你可以在推送步骤后新增一个script任务,通过判断docker image inspect的退出码来控制流水线状态。当退出码为1时,手动返回错误码触发流水线失败。

修改后的完整Pipeline配置如下:

stages:
 - stage: A
   jobs:
     - job: build
       steps:
         - script: docker image build -t repo/myimage:1 .
           displayName: "构建Docker镜像"
         - script: docker push repo/myimage:1
           displayName: "推送Docker镜像到仓库"
         - script: |
             # 执行镜像检查命令
             docker image inspect repo/myimage:1
             # 判断退出码,1表示镜像不存在
             if [ $? -eq 1 ]; then
               echo "错误:镜像repo/myimage:1未成功推送到仓库"
               # 返回错误码,标记任务失败
               exit 1
             fi
           displayName: "检查镜像是否推送成功"

说明:

  • $?是bash环境中获取上一条命令退出码的变量,对应docker image inspect的返回值
  • exit 1会让当前script任务标记为失败,进而终止整个流水线

如果使用Windows CMD环境,语法调整为:

- script: |
    docker image inspect repo/myimage:1
    if %errorlevel% equ 1 (
      echo 错误:镜像repo/myimage:1未成功推送到仓库
      exit /b 1
    )
  displayName: "检查镜像是否推送成功"

2. 在任务结果中获取Azure Pipeline变量

2.1 获取预定义系统变量

Azure Pipeline提供大量预定义变量(如构建ID、分支名等),直接通过$(变量名)的形式在任务中引用即可:

示例:在script任务中打印常用预定义变量

- script: |
    echo 当前构建ID:$(Build.BuildId)
    echo 当前触发分支:$(Build.SourceBranchName)
    echo 工件暂存目录:$(Build.ArtifactStagingDirectory)
  displayName: "打印预定义系统变量"

2.2 传递并获取自定义输出变量

如果需要在任务或作业之间传递变量,可通过输出变量机制实现:

步骤1:在前置任务中设置输出变量

- script: |
    # 执行镜像检查并将退出码设为输出变量
    docker image inspect repo/myimage:1
    echo "##vso[task.setvariable variable=inspectExitCode;isOutput=true]$?"
  name: ImageInspectTask
  displayName: "执行镜像检查并设置输出变量"
  • name: ImageInspectTask:给当前任务命名,用于后续引用输出变量
  • ##vso[task.setvariable...]:Azure Pipeline日志命令,isOutput=true标记变量为可跨任务输出

步骤2:在同作业后续任务中引用

直接通过$(任务名.变量名)格式调用:

- script: |
    echo 镜像检查退出码:$(ImageInspectTask.inspectExitCode)
    if [ $(ImageInspectTask.inspectExitCode) -eq 1 ]; then
      echo "镜像推送失败"
      exit 1
    fi
  displayName: "使用输出变量判断结果"

步骤3:跨作业引用输出变量

需先设置作业依赖,再通过dependencies对象获取:

stages:
 - stage: A
   jobs:
     - job: build
       steps:
         - script: |
             docker image inspect repo/myimage:1
             echo "##vso[task.setvariable variable=inspectExitCode;isOutput=true]$?"
           name: ImageInspectTask
     - job: check
       dependsOn: build
       variables:
         inspectCode: $[ dependencies.build.outputs['ImageInspectTask.inspectExitCode'] ]
       steps:
         - script: |
             echo 跨作业获取的退出码:$(inspectCode)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:45:18