CI流水线busybox环境执行kaniko读取build.args参数报错如何解决?
问题根因
1. Shell语法不兼容(核心报错原因)
你使用的gcr.io/kaniko-project/executor:v1.6.0-debug镜像基于busybox,默认shell是ash,ash不支持+=字符串累加赋值语法,你写的out+="--build-arg $i "会被ash直接当成完整命令尝试执行,所以会报out+=--build-arg ... : not found的错误。
2. CI配置语法错误
你CI脚本里的${$CI_PROJECT_DIR}写法错误,多了一个$符号,会导致路径解析失败,正确写法是${CI_PROJECT_DIR}。
3. 参数读取的潜在问题
你用for i in cat build.args``遍历文件内容时,会把行内的空格也作为分隔符切割参数,比如你示例里的title="Great image"会被拆成title="Great和image"两个独立字符串,最终导致--build-arg参数传递异常。
修复方案
1. 修改kaniko执行命令
替换原来的+=拼接逻辑,直接按行读取build.args生成参数即可,兼容ash语法:
/kaniko/executor \ --context "$path" \ --destination "$CI_REGISTRY_IMAGE" \ $(while read -r arg_line; do echo "--build-arg $arg_line"; done < build.args)
2. 修正CI配置的变量写法
把CI脚本里的路径部分修改为:
${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')
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

