首页 > 解决方案 > 在同一 ADO 构建管道内的脚本中注入 ADO 环境变量

问题描述

我有一个调用代码的用例,它调用一些其他代码,而其他代码需要执行它的 ADO 环境变量(同一个 ADO 管道)

问题是 - 我如何在该代码中注入这些 ADO 管道环境变量?

更多细节::

  1. 我正在 Dockerizing 一个 Java 应用程序,它从 2 个 entrypoint.sh 文件中获取输入
  2. 第一个输入文件下载自定义插件
  3. 第二个输入文件执行插件(在步骤 2 中下载)并在 pom.xml 中插入一个新的 JSON 代码部分
  4. 插入的 JSON 代码部分使用 ADO 构建变量 $(Build.DefinitionName) & $(Build.SourceBranchName)
  5. 'mvn package' 然后应该使用更新的 pom.xml(带有 ADO 变量)来构建应用程序

我的 ADO 管道成功完成(docker build 任务正确完成),但 ADO 环境变量没有引入变量的“值”,而是 $(Build.DefinitionName) & $(SourceBranchName) 作为输出。

要插入到 POM.xml 中的 JSON 代码

"createBuildSessionId": true,
"appName": "$(Build.DefinitionName)",
"branchName": "$(Build.SourceBranchName)",
"buildName": "$(Build.BuildNumber)",
"packagesIncluded": "*com.m*.*"

执行 ADO 构建管道后的实际日志:

<configuration>
<createBuildSessionId>true</createBuildSessionId>
<appName>$(Build.DefinitionName)</appName>
<build>$(Build.BuildNumber)</build>
<branch>$(Build.SourceBranchName)</branch>
<packagesincluded>*com.m*.*</packagesincluded>

任何帮助将不胜感激!

标签: azuremavenazure-pipelines

解决方案


由于您正在对 Java 应用程序进行 docker 化,您可以尝试以下步骤将管道变量传递给 Pom.xml 文件。

  1. 通过 docker ARG 将管道变量导入 dockerfile

  2. 在 mvn package 命令中使用导入的变量,并将其作为参数传递给 Pom.xml

mvn package -DmyVariable=someValue

这是我的例子:

Dockerfile

ARG BranchName
ARG BuildNumber
ARG BuildDefinition

ENV BranchName=${BranchName}
ENV BuildNumber = ${BuildNumber}
ENV BuildDefinition = ${BuildDefinition}



RUN mvn package -DBuild.DefinitionName=$BuildDefinition  -DBuild.SourceBranchName=$BranchName -DBuild.BuildNumber=$BuildNumber

构建管道

  - task: Docker@2
    displayName: build
    inputs:
      containerRegistry: Dockerconnection
      command: build
      arguments: --build-arg BranchName="$(Build.SourceBranchName)"   --build-arg BuildNumber="$(Build.BuildNumber)"  --build-arg BuildDefinition="$(Build.DefinitionName)"

json代码

"createBuildSessionId": true,
"appName": "${Build.DefinitionName}",
"branchName": "${Build.SourceBranchName}",
"buildName": "${Build.BuildNumber}",
"packagesIncluded": "*com.m*.*"

推荐阅读