我有一个docker文件,我可以毫无问题地在本地构建,但在Azure Devops上,变量设置不正确。例如,在本地,我可以运行一个多阶段docker构建,通过授权从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
我为这个文档做了一个测试
FROM alpine
ARG a_version
RUN echo $a_version
和此管道
steps:
- pwsh: ls 'stackoverflow/85-docker/'
- task: Docker@2
inputs:
containerRegistry: 'devopsmanual-acr'
command: 'build'
Dockerfile: 'stackoverflow/85-docker/DOCKERFILE'
arguments: '--build-arg a_version=$(System.AccessToken)'
我得到了
2020-11-23T15:39:04.0075804Z Step 3/12 : RUN echo $a_version
2020-11-23T15:39:04.0228448Z ---> Running in 45fc8efb4968
2020-11-23T15:39:04.3523862Z ***
这是正确的,因为它检测到了秘密并屏蔽了它。
如果我为nor机密变量运行它,我有:
2020-11-23T15:42:10.0106169Z Step 3/12 : RUN echo $a_version
2020-11-23T15:42:10.0288192Z ---> Running in a59622e31abb
2020-11-23T15:42:10.3746013Z SomeValue123
其中,某些值123
是我的管道变量的值
我最近尝试将我们的UI或基于经典的发布管道转换为基于YAML的发布管道。 我们有三个环境,最初一个CD构建将很高兴地部署到我们的开发环境中。 从那时起,我们手动触发一个版本(re:promotion)进行测试,然后在某个时候,如果我们都满意的话,手动升级到生产环境。 我们知道我们不能在发布阶段之间模仿手动推广,因为它目前不受支持,但是根据我所读到的,我们应该能够通过为请求手动推广的每个环境定义安全
问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-
问题内容: 是否有任何环境变量可用于获取Jenkins管道标题? 我知道我们可以使用它来获得自由职业的头衔,但是有什么可以用来获取管道名称的东西吗? 问题答案: 您可以使用相同的名称(例如或)从groovy访问相同的环境变量。 从文档中: 可以从Groovy代码中以env.VARNAME或仅以VARNAME的形式访问环境变量。您也可以写入这些属性(仅使用env。前缀): 这些定义也将在构建期间或构
我在Azure DevOps中有一个发布管道。这是从ACR中提取docker映像并发布到Web应用程序(linux容器)。所有工作都很好(容器按预期发布和运行),但是我似乎不能在运行时向容器传递任何自定义环境变量。 释放管道 在管道“Deploy Azure App Service”中的变量选项卡下,我添加了,然后在“App Settings”下添加了 有人知道如何在运行时通过Azure DevO
假设我在Azure上有3个环境:开发、测试和产品。我有相同的管道来构建和部署每个环境的资源和代码,除了两个不同之处: 不同的触发分支 对于这种情况,正确的方法是什么?因为我至少想到了3个,没有一个是完美的: 选项1:我想我可以在Azure DevOps上创建一个管道(由3个分支中的任何一个触发),每个环境有3个阶段,每个阶段根据源分支添加一个要运行的条件,如下所示: 并且在每个阶段引用不同的变量。
问题内容: 在詹金斯(Jenkins)的工作中,我正在执行预构建中的一些操作,例如执行Shell脚本。通过使用Jenkins插件“ EnvInject”,我想将环境变量注入到我的Maven构建(单元测试)中,以便可以在Java单元测试中使用这些变量。在shell脚本中,即时消息执行类似以下操作: 在构建Jenkins时,输出以下内容: 但是“ ip”变量在我的Java代码(单元测试)中不可用。当我