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

