【问题标题】:Azure Devops Pipeline : Accessing agent JAVA_HOME variable in xml fileAzure Devops Pipeline:访问 xml 文件中的代理 JAVA_HOME 变量
【发布时间】:2020-07-29 18:26:36
【问题描述】:

对于我的 java 项目,我使用 azure devops 管道进行构建。为了配置 jdkhome 路径,我将它放在项目根文件夹中的 toolchains xml 文件中:

<toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <!--<jdkHome>/usr/lib/jvm/zulu-8-azure-amd64</jdkHome>-->
    </configuration>
  </toolchain>

但是 azure devops 代理已经更新了他们的 jdk,但我的构建失败了。所以,现在我想从代理中选择路径,而不是硬编码。我看到在代理上,环境变量设置为 $JAVA_HOME_8_X64 并为其分配了路径。

那么,如何在管道天气中使用此环境变量,在工具链 xml 文件中或以其他方式引用它?

我尝试直接在xml中引用,但没有成功。我还尝试从市场添加一些任务,但没有奏效。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 为什么需要工具链文件?为什么不使用更高版本的 JDK 构建,而是使用 Java 8?
  • @JFabianMeier 我尝试评论工具链文件中的所有内容,并从代理制作 pipelihigher JDK,但它失败了。你能指出怎么做吗?
  • 那么你遇到了什么问题?
  • @JFabianMeier .. 我不确定我应该设置什么以及在哪里设置,以便它选择代理定义的 JAVA_HOME_8_X64 变量的 jdk 版本。
  • 嗨,Sushil,没有得到您的最新信息,下面的答案对您有帮助吗?或者,如果您有任何疑虑,请随时在此处分享,我们将为您提供帮助。

标签: java maven azure-devops continuous-integration


【解决方案1】:

我们可以使用扩展名Replace TokensMagic Chunks 来更新 pom.xml 文件。

pom.xml 内容:

<toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>JAVAHOME</jdkHome>
    </configuration>
  </toolchain>

步骤:

一个。创建构建管道A,打开构建管道A并添加新变量JAVAHOME并授予测试构建服务(xxx)帐户编辑构建管道权限。 (打开构建管道(A)--> ... --> 安全性 --> 编辑构建管道设置为允许)

b。启用功能允许脚本访问 OAuth 令牌(单击代理作业名称=>其他选项)添加任务 powershell(更新 JAVAHOME 值)并输入下面的脚本。

$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/{build pipeline A definition ID}?api-version=5.1"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

# Update an existing variable named JAVAHOME to its new value JAVA_HOME_11_X64
$pipeline.variables.JAVAHOME.value= $($env:JAVA_HOME_11_X64)
# my sample is get the variable JAVA_HOME_11_X64, please update it to JAVA_HOME_8_X64


####****************** update the modified object **************************

$json = $($pipeline | ConvertTo-Json -Depth 100)


$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

write-host "==========================================================" 
Write-host "The value of Varialbe 'JAVAHOME' is updated to" $updatedef.variables.JAVAHOME.value
write-host "=========================================================="

c。添加任务 Replace Tokens 并配置任务。

d。添加任务powershell并使用代码$ourfilesdata = Get-Content "pom.xml" Write-Output $ourfilesdata输出文件内容。

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2019-09-18
    相关资源
    最近更新 更多