Jenkinsfile не использует полную команду docker-compose, теряя build-arg - PullRequest
2 голосов
/ 11 апреля 2019

У нас есть 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

Они передаются для установки элементов LABEL вDockerfile.Я пытался использовать Docker и устанавливать метки вручную, но он также обрезает после второй метки.

Он будет использовать первые два или три, независимо от того, что они есть.Все, что после этих меток (или build-args для docker-compose) отрубается и не используется.

Например, использовалась команда 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.

Это отрезало тег и период для каталога.

1 Ответ

0 голосов
/ 11 апреля 2019

Оказывается, я идиот.

git describe --tags --always возвращает новую строку, поэтому мне также нужно было | tr -d '\n'. Я не писал исходную команду даты и должен был взглянуть на это раньше.

...