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

如何向GitHub Action传递Docker镜像名称并在uses字段中正确引用

问题原因

这是GitHub Composite Action的原生限制:uses 字段的内容会在Action加载阶段提前解析,此时inputs上下文还未完成初始化赋值,因此无法在uses的docker://地址中直接插入${{ inputs.xxx }}变量;而run字段是在步骤执行阶段才解析变量,所以你测试打印参数的逻辑可以正常运行。


解决方案1(改动最小,推荐):手动执行docker run命令

直接将原docker://类型的uses步骤替换为手动执行docker命令的run步骤,即可正常传入inputs参数,修改后的action.yaml如下:

name: Build Package
description: Build Debian packages using Docker image

inputs:
  docker_image:
    description: Name of the docker image to use
    required: true

runs:
  using: 'composite'
  steps:
    - name: Check out the repository
      uses: actions/checkout@v4

    - name: Build `*.deb` packages
      shell: bash
      run: |
        docker run --rm \
          -v "${{ github.workspace }}:/workspace" \
          -w /workspace \
          "${{ inputs.docker_image }}" \
          ./build.sh

参数说明:

  • --rm:容器执行结束后自动销毁
  • -v:将当前工作目录挂载到容器内,保证容器可以读取到仓库中的源码和build.sh脚本
  • -w:指定容器内的工作目录为挂载的仓库目录
  • 末尾依次传入镜像名和要执行的入口命令,和你原配置的执行效果完全一致。

解决方案2:切换为Docker类型的Action

你也可以将Action的运行类型从composite改为docker,原生支持在镜像地址中使用inputs参数,修改后的action.yaml如下:

name: Build Package
description: Build Debian packages using Docker image

inputs:
  docker_image:
    description: Name of the docker image to use
    required: true

runs:
  using: 'docker'
  image: "${{ inputs.docker_image }}"
  entrypoint: './build.sh'

注意该方案下GitHub会自动将仓库目录挂载到容器的/github/workspace路径下,需要确保build.sh中的相对路径适配该规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:54:01