Когда я выполняю команды сборки docker в конвейере YAML Azure Devops, ARG, указанный в моем Dockerfile, не работает - PullRequest
0 голосов
/ 10 декабря 2018

Вот сценарий, который я выполняю как часть моего конвейера YAML:

- script: |
cd ./Server
ECHO ON
docker build -t image_name" -f path/to/Dockerfile --build-arg BUILD_VERSION=%COMPUTED_BUILD_VERSION% .

А вот вывод сценария, который он запускает в Azure Devops:

D:\a\1\s\Server>docker build -t "image_name" -f path/to/Dockerfile --build-arg BUILD_VERSION=2018.12101 .

В частности, обратите внимание, что переменная окружения% COMPUTED_BUILD_VERSION% передается в команду сборки docker.

Файл Docker выглядит следующим образом:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
ARG BUILD_VERSION
RUN ECHO Building Service version %BUILD_VERSION%
RUN ECHO Building Service version $BUILD_VERSION
RUN ECHO Building Service version ${BUILD_VERSION}

И вывод в Azure DevOps выглядиткак это:

Sending build context to Docker daemon  101.4MB
Step 1/20 : FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
2.1-aspnetcore-runtime: Pulling from microsoft/dotnet
bce2fbc256ea: Already exists
6f2071dcd729: Pulling fs layer
85e382cad9c1: Pulling fs layer
354ed5b87a30: Pulling fs layer
4f039533731a: Pulling fs layer
96e328ca2eac: Pulling fs layer
4975b2dddfe9: Pulling fs layer
4f039533731a: Waiting
96e328ca2eac: Waiting
4975b2dddfe9: Waiting
354ed5b87a30: Verifying Checksum
354ed5b87a30: Download complete
85e382cad9c1: Verifying Checksum
85e382cad9c1: Download complete
96e328ca2eac: Verifying Checksum
96e328ca2eac: Download complete
4975b2dddfe9: Verifying Checksum
4975b2dddfe9: Download complete
4f039533731a: Verifying Checksum
4f039533731a: Download complete
6f2071dcd729: Verifying Checksum
6f2071dcd729: Download complete
6f2071dcd729: Pull complete
85e382cad9c1: Pull complete
354ed5b87a30: Pull complete
4f039533731a: Pull complete
96e328ca2eac: Pull complete
4975b2dddfe9: Pull complete
Digest: sha256:dcb2b8ad624a07f7acc3dc7eb4d8dcc8fb5870d5d86c74aec61a7b1545e60920
Status: Downloaded newer image for microsoft/dotnet:2.1-aspnetcore-runtime
 ---> 3e1675085dc5
Step 2/20 : ARG BUILD_VERSION
 ---> Running in 569b03e478fe
Removing intermediate container 569b03e478fe
 ---> fd3325df3c1d
Step 3/20 : RUN ECHO Building Service version %BUILD_VERSION%
 ---> Running in 7d6a8e6b1c8b
Building
Service
version
%BUILD_VERSION%
Removing intermediate container 7d6a8e6b1c8b
 ---> cfb5403a8e41
Step 4/20 : RUN ECHO Building version $BUILD_VERSION
 ---> Running in 4731418f8d80
Building
Service
version
Removing intermediate container 4731418f8d80
 ---> 6ca6bfbf85e4
Step 5/20 : RUN ECHO Building Service version ${BUILD_VERSION}
 ---> Running in 3e1bfbdfbf94
Building
Service
version

Обратите внимание, что я просто НЕ МОГУ, кажется, заставить конвейер Azure DevOps правильно распознавать или распечатывать параметр Dockerfile ARG.Это проблема, потому что позже в Dockerfile (который я пропустил) переменная используется в качестве входных данных для другого шага, который заканчивается неудачей.

Кто-нибудь знает, как заставить это работать?Я чувствую, что, должно быть, мне не хватает чего-то простого ...

1 Ответ

0 голосов
/ 08 января 2019

В конце концов я обнаружил, что проблема заключалась в том, что оболочка отличалась от ожидаемой в Azure DevOps.Я где-то читал, что оболочкой по умолчанию является CMD для Windows Containers.Это было верно при локальном запуске команды docker build на моей машине.Однако в Azure Devops оболочкой по умолчанию была powershell вместо cmd .Как только я специально выбрал оболочку в своем Dockerfile, он начал работать правильно для меня.

...