Jenkinsfile没有使用完整的docker-compose命令,丢失了build-arg

问题描述 投票:2回答:1

我们有一个启动docker-compose命令的Jenkins文件。 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构建的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.

它切断了标记和目录的周期。

docker jenkins groovy docker-compose jenkins-pipeline
1个回答
0
投票

结果我是个白痴。

git describe --tags --always返回一条新线,所以我也需要| tr -d '\n'。我没有写原始日期命令,应该先看一下。

© www.soinside.com 2019 - 2024. All rights reserved.