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

向docker/build-push-action@v5传递多行build-contexts变量的问题求助

问题描述

使用docker/build-push-action@v5时,直接通过多行字符串指定build-contexts参数能正常生成多个--build-context选项:

uses: docker/build-push-action@v5
with:
  build-contexts: |
    a=10
    b=20

但通过复合Action生成的变量传递时遇到两个问题:

  • 若变量值为"a=10\nb=20",传递后会被截断,仅保留第一行a=10
  • 若转义换行符为"a=10\\nb=20",变量会被完整传递,但Docker会将整个字符串视为单个上下文,执行命令变为:
    /usr/bin/docker buildx build --build-context a=10\nb=20
    

实际期望执行的命令是:

/usr/bin/docker buildx build --build-context a=10 --build-context b=20
解决方案

方法1:使用GitHub Actions多行输出语法

修改复合Action中的Python代码,采用GitHub Actions的多行输出格式(用<<EOF包裹内容),这样能完整保留换行符:

with open(os.environ["GITHUB_OUTPUT"], "a") as f:
    # 启动多行输出
    print(f"build_contexts<<EOF", file=f)
    # 输出原始多行内容
    print(contexts, file=f)
    # 结束多行输出
    print("EOF", file=f)

然后在引用变量时,直接传递即可,不需要额外的|符号:

uses: docker/build-push-action@v5
with:
  build-contexts: ${{ inputs.build_contexts }}

原理说明

GitHub Actions默认会把输出变量中的换行符解析为参数分隔符,直接用key=value格式输出多行字符串时,会被截断为第一行。而多行输出语法<<EOF会告诉Actions保留内容中的所有换行符,传递给docker/build-push-action后,就能被正确解析为多个独立的build上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:23:19