如何向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
相关产品推荐
相关产品推荐

