我在Jenkinsfile中部署了以下shell脚本
withEnv(['PATH+EXTRA=/busybox:/kaniko']) {
sh """#!/busybox/sh
cat "images2.txt"
cat "images2.txt" | while read line || [ -n "\$line" ]; do
fields=(\$line)
echo "FROM \${fields[0]}" | /kaniko/executor --dockerfile /dev/stdin --destination \${fields[1]}
done
"""
}我必须转义$,因为它在Jenkinsfile中,否则Groovy不会期望它。
images2.txt的内容包括:
docker.io/prom/blackbox-exporter:v0.14.0 eu.gcr.io/development/infra/monitoring/blackbox-exporter:v0.14.0
docker.io/busybox:1.30.0 eu.gcr.io/development/infra/monitoring/busybox:1.30.0当管道运行时,我得到错误
/home/jenkins/agent/workspace/test-job@tmp/durable-9cce3aab/script.sh: line 4: syntax error: unexpected "(" (expecting "done")我也尝试过这样做
sh """#!/busybox/sh
input="images2.txt"
while IFS= read -r line
do
fields=(\$line)
echo "FROM \${fields[0]}" | /kaniko/executor --dockerfile /dev/stdin --destination \${fields[1]}
done < "\$input"
"""但结果是一样的。知道这里可能出了什么问题吗?
发布于 2019-10-25 04:02:41
根据@Charles Duffy的建议,我实现了
sh """#!/busybox/sh
cat "images2.txt" | while read field1 field2 rest; do
echo "FROM \$field1" | /kaniko/executor --dockerfile /dev/stdin --destination \$field2
done
""" 而且它工作得很完美。
https://stackoverflow.com/questions/58548013
复制相似问题