如何解决Groovy sh调用docker build将换行符添加到我的命令中
希望这是一个简单的问题。我有一个从Jenkinsfile调用的常规方法,该方法应该执行docker build
shell命令。该行如下:
sh "docker build --build-arg \"VERSION=${tag}\" -t \"${project}:${tag}\" ."
但是,当我从詹金斯(Jenkins)运行此命令时,似乎将此命令分解为换行符,使docker感到困惑:
17:26:05.151 docker build --build-arg "VERSION=<tag>
17:26:05.151 " -t "<project>:<tag>
17:26:05.151 " .
17:26:05.451 invalid argument "<project>:<tag>\n" for "-t,--tag" flag: invalid reference format
17:26:05.451 See 'docker build --help'.
变量的双引号对于以某种形式获取完整的命令是必需的。没有它们,输出将截止,如下所示:
17:17:24.368 ++ docker build --build-arg VERSION=<tag>
17:17:24.368 "docker build" requires exactly 1 argument.
我如何将bash转换为groovy肯定是错误的,但是我不确定是什么。
解决方法
请考虑以下内容:
def tag = "testing_tag\n"
def project="test_proj"
node {
echo "docker build --build-arg \"VERSION= " +
tag +
"\" -t \"${project}:" +
tag + "\" ."
}
将为您提供所拥有的一切:
docker build --build-arg "VERSION=tag
" -t "project:tag
" .
您可以使用.replace("\n","" )
def tag = "tag\n"
def project="project"
node {
echo "docker build --build-arg \"VERSION=" +
tag.replace("\n","" ).trim() +
"\" -t \"${project}:" +
tag.replace("\n","" ).trim() + "\" ."
}
更好的选择是替换所有换行符:
echo "docker build --build-arg \"VERSION=${tag}\" -t \"${project}:${tag}\" .".replace("\n","" ).trim()
现在,您只需将echo
替换为sh
def tag = "tag\n"
def project="project"
node {
def command = "docker build --build-arg \"VERSION=${tag}\" -t \"${project}:${tag}\" .".replace("\n","" ).trim()
echo command
sh command
}
此示例替换了每个换行符,无论它是不是来自Jenkins的变量(就我而言)。只需适应您的需求即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。