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

Azure ACR Task执行Bash脚本异常及az命令找不到问题排查

Azure ACR Task执行脚本问题排查

问题现象

1. 初始配置无执行动作与日志

使用初始YAML创建ACR任务后,任务创建成功但无任何执行动作,也不输出日志——即使测试仅包含echo的简单脚本,同样没有输出。

初始YAML配置:

---
name: archive
platform:
  os: linux
steps:
  - cmd: |
      REGISTRY=***
      PROD_REPO=***
      ARCHIVE_REPO=***
      echo "Logging into ACR..."
      az acr login --name $REGISTRY
      LATEST_TAG=$(az acr manifest list-metadata \
        --registry $REGISTRY --name $PROD_REPO --orderby time_desc \
        --query [0].tags[0] --output tsv)
      echo "LATEST_TAG: $LATEST_TAG"
      ALL_TAGS=$(az acr manifest list-metadata --registry $REGISTRY \
        --name $PROD_REPO --output tsv)
      for TAG in $ALL_TAGS; do
        if [ \"$TAG\" != \"$LATEST_TAG\" ]; then
          echo "Archiving tag $TAG..."
          az acr import --name $REGISTRY --source "$REGISTRY/$PROD_REPO:$TAG" \
            --repository $ARCHIVE_REPO --force
      done
      echo "Archiving process completed."
context: /dev/null
registry: ***

创建命令:

az acr task create --file archive.yaml --registry *** --name archive --schedule "* * * * *"  --context /dev/null

测试用YAML(无输出):

---
name: archive-optimizer
platform:
  os: linux
steps:
  - cmd: |
      echo "Test..."
context: /dev/null
registry: ofsav

2. 添加version字段后日志正常,但出现命令错误

在YAML中添加version: v1.1.0后,任务开始输出日志,但执行时报错:az命令未找到。

更新后YAML配置:

version: v1.1.0
steps:
  - cmd: |
      REGISTRY=***
      PROD_REPO=***
      ARCHIVE_REPO=***
      echo "Logging into ACR..."
      az acr login --name $REGISTRY
      LATEST_TAG=$(az acr manifest list-metadata \
        --registry $REGISTRY --name $PROD_REPO --orderby time_desc \
        --query [0].tags[0] --output tsv) || { echo "Failed to get latest tag"; exit 1; }
      echo "LATEST_TAG: $LATEST_TAG"
      ALL_TAGS=$(az acr manifest list-metadata --registry $REGISTRY \
        --name $PROD_REPO --output tsv) || { echo "Failed to get all tags"; exit 1; }
      echo "ALL_TAGS: $ALL_TAGS"
      for TAG in $ALL_TAGS; do
        if [ \"$TAG\" != \"$LATEST_TAG\" ]; then
          echo "Archiving tag $TAG..."
          az acr import --name $REGISTRY --source "$REGISTRY/$PROD_REPO:$TAG" \
            --repository $ARCHIVE_REPO --force || { echo "Failed to archive tag $TAG"; exit 1; }
        fi
      done
      echo "Archiving process completed."

原因分析

  1. 无执行动作与日志:ACR Task YAML缺少version字段时,默认使用旧版本运行时,该版本对配置兼容性差,会导致任务无法正确解析执行步骤,进而无任何输出。
  2. az命令未找到:尽管官方文档说明ACR Task支持az命令,但部分版本的运行时环境未预装Azure CLI,或CLI路径未加入系统环境变量;轻量型默认镜像也可能不包含Azure CLI。

解决方案

1. 修复无执行动作问题

在YAML中明确指定任务版本,推荐使用v1.1.0或更高版本,这是解决初始无输出问题的核心。

2. 解决az命令未找到问题

提供两种可行方案:

方案一:脚本内手动安装Azure CLI

在脚本开头添加安装命令,确保az可用:

version: v1.1.0
steps:
  - cmd: |
      # 安装Azure CLI
      curl -sL https://aka.ms/InstallAzureCLIDeb | bash
      # 原有脚本内容
      REGISTRY=***
      PROD_REPO=***
      ARCHIVE_REPO=***
      echo "Logging into ACR..."
      az acr login --name $REGISTRY
      # ... 剩余脚本内容

方案二:使用含Azure CLI的基础镜像

若任务需频繁执行,建议使用官方Azure CLI镜像作为运行环境:

version: v1.1.0
platform:
  os: linux
  image: mcr.microsoft.com/azure-cli:latest
steps:
  - cmd: |
      REGISTRY=***
      PROD_REPO=***
      ARCHIVE_REPO=***
      echo "Logging into ACR..."
      az acr login --name $REGISTRY
      # ... 剩余脚本内容

额外优化点

  • 移除脚本中不必要的转义引号\",Bash环境下无需该转义;
  • 可省略context: /dev/null,或指定空目录(若无需构建上下文);
  • 利用ACR Task的托管身份进行认证,无需手动执行az acr login,提升安全性与执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:52:29