【发布时间】:2021-03-05 18:35:38
【问题描述】:
我有一个 docker 文件,我可以在本地毫无问题地构建它,但在 Azure Devops 上,变量设置不正确。例如。在本地,我可以运行一个多阶段的 docker build,其中工件是从具有授权的 Azure 工件存储库中获取的。授权令牌可以在本地设置而不会出现问题。在构建管道上,我无法正确注入它。
docker 文件:
FROM gradle:5.4.1-jdk8 AS build
ARG AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
ENV AZURE_ARTIFACTS_ENV_ACCESS_TOKEN $AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon
FROM java:8
COPY --from=build /home/gradle/src/build/libs/medquality-rest-service.jar medquality-rest-service.jar
ADD wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
ENTRYPOINT ["/wait-for-it.sh", \
"${CORDA_NODE_URL}:${CORDA_NODE_PORT}", \
# "--strict", \
"--timeout=60", \
"--", \
"java", \
"-jar", \
"medquality-rest-service.jar", \
"--config.rpc.host=${CORDA_NODE_URL}", \
"--config.rpc.port=${CORDA_NODE_PORT}", \
"--config.rpc.username=user1", \
"--config.rpc.password=test"]
命令:
docker build --build-arg AZURE_ARTIFACTS_ENV_ACCESS_TOKEN .
它会注入令牌,以便多阶段构建可以获取工件。
一旦我转移到 Azure 管道,它就不会注入值,管道:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build publish'
env:
AZURE_ARTIFACTS_ENV_ACCESS_TOKEN: $(System.AccessToken)
- task: Docker@2
inputs:
containerRegistry: 'alysidia-container-registry'
repository: 'medquality-rest-service'
command: 'buildAndPush'
arguments: --build-arg AZURE_ARTIFACTS_ENV_ACCESS_TOKEN=1234567
Dockerfile: '**/Dockerfile'
# env:
# AZURE_ARTIFACTS_ENV_ACCESS_TOKEN: $(System.AccessToken)
第一个 gradle 任务正确注入了变量,但似乎我错过了与管道相关的一些内容。当前的结果是工件 PAT 未设置,因此该请求未在 Docker 任务及其多阶段构建上获得授权。例如。甚至打印出 gradle 脚本中的所有环境变量,AZURE_ARTIFACTS_ENV_ACCESS_TOKEN 不是 1234567 而是空的。
更新:
我在参数字符串上设置了连字符,看起来不错,但没有成功,添加 RUN 回显值未设置:
arguments: '--build-arg AZURE_ARTIFACTS_ENV_ACCESS_TOKEN=$(System.AccessToken)'
Dockerfile 中的 RUN 部分:
ARG AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
RUN echo $AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
ENV AZURE_ARTIFACTS_ENV_ACCESS_TOKEN $AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
RUN 命令的输出:
Step 3/21 : RUN echo $AZURE_ARTIFACTS_ENV_ACCESS_TOKEN
---> Running in 6791245d8990
Removing intermediate container 6791245d8990
【问题讨论】:
标签: docker gradle azure-devops azure-pipelines docker-multi-stage-build