GitHub Action中用Docker运行自定义Action时如何修改构建上下文
答案
核心结论
你无法完全保留原有action.yml的Docker运行配置仅修改构建上下文实现需求——GitHub官方的Docker类型Action默认强制将action.yml所在目录作为Docker构建上下文,没有内置配置项可以修改该默认行为。不过你可以仅修改action.yml的runs段内容,输入定义等其他配置完全可以保留,同时满足自定义构建上下文、镜像缓存的需求。
可行实现方案
推荐将你的Action从Docker类型改为复合类型(Composite Action),手动控制Docker构建流程:
1. 调整action.yml配置
把./.github/actions/myaction/action.yml的runs段修改为如下结构即可:
name: 'myaction' description: 'myaction' inputs: some_input: description: 'some_input' required: true runs: using: 'composite' steps: # 构建Docker镜像,指定根目录为上下文,同时启用GitHub构建缓存 - name: Build action Docker image uses: docker/build-push-action@v5 with: context: ${{ github.workspace }} file: ${{ github.action_path }}/Dockerfile tags: myaction:latest load: true cache-from: type=gha cache-to: type=gha,mode=max # 运行构建好的容器,传入输入参数 - name: Run myaction shell: bash run: | docker run --rm \ -v ${{ github.workspace }}:${{ github.workspace }} \ -w ${{ github.workspace }} \ myaction:latest ${{ inputs.some_input }}
2. 配置说明
- 构建上下文通过
context: ${{ github.workspace }}指定为项目根目录,你原本Dockerfile里的COPY路径不需要做任何修改 - 缓存通过Docker官方构建Action的
type=gha实现,GitHub会自动缓存镜像层,无需额外配置缓存规则,后续运行只有Dockerfile改动时才会重新构建 - 容器运行时挂载了工作目录,保证容器内可以访问工作流前置步骤生成的所有文件
注意事项
- 调用该Action的工作流需要先执行
actions/checkout拉取仓库代码,保证构建上下文包含需要的文件 - 如果你有其他需要传递给容器的环境变量,可以在
docker run命令中通过-e 变量名参数传入
内容的提问来源于stack exchange,提问作者Kevin Kreps
相关产品推荐
相关产品推荐

