如何在不下载的情况下在 Azure Devops Agent 中使用特定版本的 Java?

Arc*_*ano 12 java azure-devops

我正在尝试使用 Maven 包装器而不是 Maven 任务来运行 Maven。但是,它失败了,因为它使用的是旧版本的 Java。JavaInstaller 任务似乎需要 JDK 的远程源,我宁愿避免这样做并使用可与 Maven 任务一起使用的任务,但我找不到它在任何地方的记录。

Mar*_*eis 17

现在还可以使用该JavaToolInstaller任务来激活预安装的 Java 版本之一,例如

- task: JavaToolInstaller@0
  inputs:
    versionSpec: '11'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'PreInstalled'
Run Code Online (Sandbox Code Playgroud)

请参阅以下文档:https : //docs.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/java-tool-installer?view=azure-devops

它还将设置JAVA_HOME并添加PATH,请参阅源:https : //github.com/microsoft/azure-pipelines-tasks/blob/46cca412451ac4418d6332114fca8ef8c3095de1/Tasks/JavaToolInstallerV0/javatoolinstaller.ts#L80

  • 根据文档,..仅适用于基于 Microsoft 的代理。 (2认同)

Arc*_*ano 8

script在为基于 Unix 的代理运行 Maven 之前添加以下内容

- script: |
    echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)"
    echo "##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)/bin:$(PATH)"
  displayName: "Set java version"
Run Code Online (Sandbox Code Playgroud)

对于基于 Windows 的代理

- script: |
    echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)"
    echo "##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)"
  displayName: "Set java version"
Run Code Online (Sandbox Code Playgroud)

这部分管道代码显示了如何选择 JAVA_HOME 值:https : //github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/Common/java-common/java-common.ts


pal*_*lxk 7

要使用的 Java 版本可以通过envLinux 或 macOS 的任务字段设置:

- script: |
    java -version
  env:
    JAVA_HOME: $(JAVA_HOME_8_X64)
    PATH: $(JAVA_HOME_8_X64)/bin:$(PATH)
Run Code Online (Sandbox Code Playgroud)

对于 Windows,将 PATH 中的冒号更改为分号:

- script: |
    java -version
  env:
    JAVA_HOME: $(JAVA_HOME_8_X64)
    PATH: $(JAVA_HOME_8_X64)/bin;$(PATH)
Run Code Online (Sandbox Code Playgroud)

Java 版本的替代品包括:

  • JAVA_HOME_7_X64
    • 在 Windows 上可用:vs2017-win2016,windows-2019
    • 在 macOS 上可用:macos-10.14,macos-10.15
    • 在 Linux 上可用:ubuntu-16.04ubuntu-18.04
  • JAVA_HOME_8_X64
    • 在 Windows 上可用:vs2017-win2016,windows-2019
    • 适用于 macOS:macos-10.14,macos-10.15
    • 在 Linux 上可用:ubuntu-16.04, ubuntu-18.04,ubuntu-20.04
  • JAVA_HOME_11_X64
    • 在 Windows 上可用:vs2017-win2016,windows-2019
    • 适用于 macOS:macos-10.14,macos-10.15
    • 在 Linux 上可用:ubuntu-16.04, ubuntu-18.04,ubuntu-20.04
  • JAVA_HOME_12_X64
    • 适用于 macOS:macos-10.14,macos-10.15
    • 在 Linux 上可用:ubuntu-16.04ubuntu-18.04
  • JAVA_HOME_13_X64
    • 在 Windows 上可用:vs2017-win2016,windows-2019
    • 适用于 macOS:macos-10.14,macos-10.15
  • JAVA_HOME_14_X64
    • 适用于 macOS:macos-10.14,macos-10.15

  • 您还可以查看图像自述文件来查看安装的 JDK 版本及其变量名称。示例:https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md (2认同)

R. *_*olt 6

正如Martin Kreidenweis已经提到的,可以使用JavaToolInstaller 。但是,当在自托管代理
上使用此功能时,需要在代理上安装 Java,并且需要将所需的环境变量设置为指向安装目录。

JavaToolInstaller 使用从其配置派生的环境变量。习俗:

JAVA_HOME_${versionSpec}_${jdkArchitectureOption}
Run Code Online (Sandbox Code Playgroud)

我们可以在代理的主目录中的.env文件中设置环境变量,如下所示:

JAVA_HOME_${versionSpec}_${jdkArchitectureOption}
Run Code Online (Sandbox Code Playgroud)

编辑后.env,需要重新启动代理以使环境变量可用于管道。这可以通过(代理主页)完成:

JAVA_HOME_17_x64=/usr/lib/jvm/temurin-17-jdk-amd64
Run Code Online (Sandbox Code Playgroud)

请参阅Azure 文档

之后可以添加一个步骤,例如:

./svc.sh stop
./svc.sh start
Run Code Online (Sandbox Code Playgroud)