我们有一个Jenkinsfile,可以启动docker-compose命令。 Jenkinsfile位看起来像这样
sh("""docker-compose build \
--no-cache \
--build-arg DATE=${sh([returnStdout: true, script: "date -u +%Y%m%dT%H%M%SZ | tr -d '\n'"])} \
--build-arg VERSION=${sh([returnStdout: true, script: "git describe --tags --always"])} \
--build-arg SHA=${sh([returnStdout: true, script: "git rev-parse HEAD"])}""")
但是当我在Jenkins中运行构建时,我看到它以如下方式注销了命令
docker-compose build --no-cache --build-arg DATE=20190411T142851Z --build-arg VERSION=470a670
这些将被传递以在Dockerfile中设置LABEL项目。我尝试过使用Docker并手动设置标签,但是在第二个标签之后它也会被截断。
它将使用前两个或三个,而不管它们是什么。这些标签(或docker-compose的build-args)之后的所有内容都会被切掉并且不使用。
例如,使用的docker命令是
sh("""docker build \
--no-cache \
--label com.<company>.name="Some stuff" \
--label com.<company>.build-date=${sh([returnStdout: true, script: "date -u +%Y%m%dT%H%M%SZ | tr -d '\n'"])} \
--label com.<company>.version=${sh([returnStdout: true, script: "git describe --tags --always"])} \
--label com.<company>.repo-sha=${sh([returnStdout: true, script: "git rev-parse HEAD"])} \
--tag ${folderName} \
.""")
而导致此错误
docker build --no-cache --label com.<company>.name='Some stuff' --label com.<company>.build-date=20190410T192516Z --label com.<company>.version=9bfbd1b
"docker build" requires exactly 1 argument.
它切断了目录的标签和句点。
答案 0 :(得分:0)
原来我是个白痴。
git describe --tags --always
返回新行,因此我也需要| tr -d '\n'
。我没有写原始的date命令,应该早点看一下。