如何在GitHub复合动作中向Dockerfile构建阶段传递ARG参数?
在GitHub复合动作中向Dockerfile构建阶段传递ARG参数
要在GitHub复合动作里给Dockerfile的构建阶段传递ARG参数,核心是在镜像构建步骤中通过--build-arg(或对应动作的配置项)传递,逻辑和普通GitHub Actions一致,只需嵌入到复合动作的metadata配置中。以下是两种常用实现方式:
方式一:直接执行docker build命令
在复合动作的步骤中添加run指令,执行docker build时通过--build-arg指定需要传递的参数:
# 复合动作的action.yml中的steps部分 steps: - name: 构建Docker镜像 run: | docker build \ --build-arg BUILD_ENV=${{ inputs.build-env }} \ --build-arg VERSION=${{ inputs.version }} \ -t my-app:${{ inputs.version }} .
对应的Dockerfile中需提前定义ARG:
# Dockerfile中定义构建阶段ARG ARG BUILD_ENV ARG VERSION # 在构建阶段使用参数,比如根据环境安装依赖 RUN if [ "$BUILD_ENV" = "production" ]; then npm ci --only=production; else npm ci; fi RUN echo "构建版本: $VERSION"
方式二:使用官方docker/build-push-action动作
如果依赖官方的构建推送动作,可通过build-args配置项传递参数,支持多行定义多个ARG:
# 复合动作的action.yml中的steps部分 steps: - name: 设置Docker构建上下文 uses: actions/checkout@v4 - name: 构建Docker镜像 uses: docker/build-push-action@v5 with: context: . tags: my-app:${{ inputs.version }} push: false # 若无需推送可设为false build-args: | BUILD_ENV=${{ inputs.build-env }} VERSION=${{ inputs.version }}
注意:以上两种方式传递的ARG仅在Dockerfile的构建阶段生效,不会自动成为容器运行时的环境变量(若需要运行时使用,需在Dockerfile中用ENV将ARG转换为环境变量,但这不是本次需求的范围)。
内容的提问来源于stack exchange,提问作者Paul D Smith
相关产品推荐
相关产品推荐

