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

如何在Azure Pipeline的单个Docker实例中运行多个Shell脚本?

解决Azure Pipeline中单个Docker实例运行多脚本的问题

方法1:合并命令到单个docker run执行

直接把所有需要运行的命令通过bash -c打包成一个命令串,用&&连接确保顺序执行,所有操作都会在同一个容器实例里完成。

修改后的Pipeline步骤示例:

- script: |
    docker run my-registry.azurecr.io/somerepo/rnd-hello:latest bash -c "
      cmake -DCMAKE_BUILD_TYPE=Release -Bbuild &&
      cmake --build build --config Release &&
      ./path/to/your/script1.sh &&
      ./path/to/your/script2.sh
    "

如果命令包含特殊字符,注意用引号正确包裹,避免解析错误。

方法2:挂载本地脚本到容器执行

如果命令太多太复杂,可以先在Pipeline代理机器上创建一个脚本文件,再通过docker run的-v参数挂载到容器内部执行。

示例步骤:

- script: |
    # 创建本地脚本文件
    cat << 'EOF' > run_all_commands.sh
    #!/bin/bash
    cmake -DCMAKE_BUILD_TYPE=Release -Bbuild
    cmake --build build --config Release
    ./path/to/your/script1.sh
    ./path/to/your/script2.sh
    EOF
    # 赋予执行权限
    chmod +x run_all_commands.sh
    # 挂载脚本到容器并执行
    docker run -v $(pwd)/run_all_commands.sh:/tmp/run_all_commands.sh my-registry.azurecr.io/somerepo/rnd-hello:latest bash /tmp/run_all_commands.sh

这种方式更易维护,脚本内容可单独编辑,避免长命令串的混乱。

方法3:使用Azure Pipeline的容器作业

直接将整个job指定在目标Docker容器中运行,所有后续步骤都会自动在这个容器内执行,无需手动处理docker命令。

修改后的job配置示例:

trigger: none

jobs:
- job: RunTest
  workspace:
    clean: all
  container:
    image: my-registry.azurecr.io/somerepo/rnd-hello:latest
    endpoint: my-acr # 对应你的ACR服务连接
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: |
      cmake -DCMAKE_BUILD_TYPE=Release -Bbuild
      cmake --build build --config Release
      ./path/to/your/script1.sh
      ./path/to/your/script2.sh
    displayName: 执行所有构建和脚本命令

这个方法最简洁,Pipeline会自动处理容器的拉取、启动和销毁,所有步骤都在同一个容器实例中完成,完全不需要手动操作docker命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:33:22