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

GitHub Actions构建Docker时能否传参实现动态FROM?

实现GitHub Actions中动态构建带参数的Docker镜像

当然可以!GitHub Actions完全支持在构建Docker镜像时传入构建参数(--build-arg),结合Dockerfile的ARG指令,你就能实现动态的FROM镜像标签,让Action使用者按需选择不同的Android API版本。

以下是具体的实现步骤:

1. 修改你的Dockerfile,添加构建参数

首先要在Dockerfile中定义一个ARG变量,用来动态替换FROM指令里的API版本,同时设置默认值保证不传参数时也能正常构建:

# 定义构建参数,默认值为api-28
ARG ANDROID_API_VERSION=api-28
# 动态引用参数作为镜像标签
FROM circleci/android:${ANDROID_API_VERSION}

COPY entrypoint.sh /entrypoint.sh
RUN sudo chmod +x entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]

注意:ARG必须放在FROM指令之前,因为FROM是构建的第一个阶段,只有提前定义的ARG才能在FROM中生效。

2. 配置GitHub Action,允许传入参数

如果这是一个自定义Action(就像你的日志里显示的Diolor/Android-build-action),你需要在Action的action.yml文件中添加输入参数,并将其传递给Docker构建过程:

name: 'Android Build Action'
description: 'Custom action for Android builds with configurable API version'
# 定义使用者可以传入的参数
inputs:
  android-api-version:
    description: 'Android API version tag (e.g., api-28, api-30, api-33)'
    required: false
    default: 'api-28' # 和Dockerfile的默认值保持一致
# 配置运行方式,将输入参数作为构建参数传递
runs:
  using: 'docker'
  image: 'Dockerfile'
  build-args:
    ANDROID_API_VERSION: ${{ inputs.android-api-version }}

配置完成后,GitHub Actions在执行docker build时会自动添加--build-arg ANDROID_API_VERSION=xxx参数,对应你日志里的构建命令会变成类似:

/usr/bin/docker build --build-arg ANDROID_API_VERSION=api-30 -t 2e4e3a:xxxxxx "/home/runner/work/_actions/Diolor/Android-build-action/master"

3. 使用者如何调用Action并指定版本

其他用户在自己的GitHub workflow中调用你的Action时,只需要通过with字段传入想要的API版本即可:

jobs:
  android-build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 调用你的Action,指定API版本为api-30
      - uses: Diolor/Android-build-action@master
        with:
          android-api-version: 'api-30'

如果用户不指定参数,会默认使用api-28,保持原有行为的兼容性。

备选方案:直接在Workflow中使用环境变量

如果不需要封装成自定义Action,只是在自己的workflow中执行docker build,也可以通过环境变量传递参数:

- name: Build Android Docker image
  env:
    # 可以在这里直接指定,或者通过workflow的inputs传递
    ANDROID_API_TAG: 'api-30'
  run: |
    docker build \
      --build-arg ANDROID_API_VERSION=$ANDROID_API_TAG \
      -t my-android-build-image .

这种方式更灵活,适合不需要复用的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:42:55