【发布时间】:2021-09-28 17:15:53
【问题描述】:
在 CI 管道中,我正在运行 kaniko 执行器命令(使用 busybox)。
除了两个参数之外,我还想使用 build.args 文件获取所有 --build-arg 值。该文件有一个简单的键/值内容
/kaniko/executor \
--context $path \
--destination $CI_REGISTRY_IMAGE \
$(for i in `cat build.args`; do out+="--build-arg $i " ; done; echo $out;out="")
build.args
name="application-name"
version="1.2.3"
port="3000"
title="Great image"
description="This is a wonderful description of nothing"
但是对于每个值,我确实收到了多个错误,例如 eval: line 149: out+=--build-arg name="application-name" : not found。我错过了什么,为什么我的代码有误?
更新
deploy:
stage: deployment
image:
name: gcr.io/kaniko-project/executor:v1.6.0-debug
entrypoint: ['']
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
- |
apps=$(cat $AFFECTED_APPS)
for item in $apps; do
domain=${item%-*}
app=${item##*-}
path=$CI_PROJECT_DIR/dist/apps/${domain}/${app}
echo "Build docker image ${item}"
${$CI_PROJECT_DIR}/tools/scripts/build_docker.sh ${path}/build.args \
--context $path \
--destination $CI_REGISTRY_IMAGE \
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
done
【问题讨论】:
-
Busybox sh 不支持
+=。 -
@BenjaminW。哦。什么是busybox解决方案?
-
即兴发挥,类似于
out="$out --build-arg $i",但它仍然受到所有未引用扩展的影响,因此使用起来不是超级安全。 github.com/dylanaraps/pure-sh-bible 可能有更好方法的指针,但我现在什么也没看到。 -
@BenjaminW。你能解释一下为什么它可能不安全吗?
-
“不安全”不是正确的词,而是“不健壮” - 由于分词和文件名扩展(“globbing”),未加引号的扩展可能会产生各种副作用。如果显示
build.args的内容,或许可以提出更好的解决方案,可能使用位置参数,或者使用sed等处理文件内容。