如何在 Azure-pipeline Ubuntu 代理上安装 java 13 并在 Maven 构建期间使用它?

How to install java 13 on Azure-pipeline Ubuntu agent and use it during Maven build?

我正在尝试构建 Java Maven 应用程序和 运行 针对 Postgres 数据库的一些测试。

但是,java 应用程序使用 JDK 13,而 Azure 托管代理 ubuntu 没有安装此默认值。因此,我使用脚本任务来安装它,然后在 Maven 构建期间使用它。

但是,我尝试了几个配置,但总的来说,Maven 一直抱怨找不到任何 JDK 13 安装。

我尝试的最后一个配置如下所列,我在其中通过脚本安装它,然后使用 JavaToolInstaller 任务使其可用(确保 Java_home 已设置并且 java 可以在路径中找到。 然后我得到错误

##[error]Java 13 is not preinstalled on this agent

我也尝试过不带 JavaToolInstaller 任务,然后导出 JAVA_HOME 并修改脚本中的 PATH,但后来 Maven 抱怨找不到 JDK 13.. .

请帮助如何在 Maven 构建期间在 ubuntu 代理上使用 JDK 13?

Azure 管道片段:

    variables:
    MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository
    MAVEN_OPTS: "-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)"
    JAVA_HOME : "/usr/lib/jvm/openjdk-13-jdk"
    PATH: $(JAVA_HOME)/bin:$(PATH)
    service_name: backend
    mygetUsername: myUserName
    mygetPassword: myPassword

resources:
    containers:
        - container: postgres
          image: postgres:11.6-alpine
          ports:
              - 5432:5432
          env:
              POSTGRES_DB: default
              POSTGRES_USER: default
              POSTGRES_PASSWORD: default
              POSTGRES_HOST_AUTH_METHOD: trust


stages:
    - stage: create_artifact
      displayName: Create artifact
      jobs:
          - job: build
            displayName: Build, test and publish artifact
            services:
                postgres: postgres
            steps:
                - script: |
                    sudo apt-get install openjdk-13-jdk  
                  displayName: Installing JDK 13

                - task: JavaToolInstaller@0
                  displayName: Using JDK 13
                  inputs:
                    versionSpec: "13"
                    jdkArchitectureOption: x64
                    jdkSourceOption: "PreInstalled"

                - task: Cache@2
                  displayName: Cache Maven local repo
                  inputs:
                      key: 'maven | "$(Agent.OS)" | backend/pom.xml'
                      restoreKeys: |
                          maven | "$(Agent.OS)"
                          maven
                      path: $(MAVEN_CACHE_FOLDER)
                - task: Maven@3
                  name: maven_package
                  displayName: Maven package
                  inputs:
                      goals: "package"
                      mavenPomFile: "backend/pom.xml"
                      options: '--settings backend/.mvn/settings.xml -DmygetUsername=$(mygetUsername) -DmygetPassword=$(mygetPassword)'
                      mavenOptions: "-Xmx3072m $(MAVEN_OPTS)"
                      javaHomeOption: "JDKVersion"
                      jdkVersionOption: "1.13"
                      mavenAuthenticateFeed: true

“预安装”功能允许您使用预安装在 Microsoft 托管代理上的 Java 版本。您可以在 Software section:

中找到可用的 Java 预安装版本

我认为您的脚本无法在托管计算机上运行。而且,您指定的 JDK 版本不在您的主机上。我建议您按照上述 table 设置您的主机(按照预定义的 JDK 安装)。

因此,可以利用其他两个选项:

这是从 Linux 上的本地目录获取存档文件的示例。该文件应该是 JAVA_HOME 目录的存档 (.zip.gz),以便它包含 binlibincludejre等目录

 - task: JavaToolInstaller@0
    inputs:
      versionSpec: "11"
      jdkArchitectureOption: x64
      jdkSourceOption: LocalDirectory
      jdkFile: "/builds/openjdk-11.0.2_linux-x64_bin.tar.gz"
      jdkDestinationDirectory: "/builds/binaries/externals"
      cleanDestinationDirectory: true

下面是从 Azure 存储下载存档文件的示例。该文件应该是 JAVA_HOME 目录的存档 (.zip.gz),以便它包含 binlibincludejre等目录

- task: JavaToolInstaller@0
  inputs:
    versionSpec: '6'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: AzureStorage
    azureResourceManagerEndpoint: myARMServiceConnection
    azureStorageAccountName: myAzureStorageAccountName
    azureContainerName: myAzureStorageContainerName
    azureCommonVirtualFile: 'jdk1.6.0_45.zip'
    jdkDestinationDirectory: '$(agent.toolsDirectory)/jdk6'
    cleanDestinationDirectory: false

问题是我指向了错误的安装目录。 我在互联网上找到的 JAVA_HOME 的上述位置,在输出 /usrl/lib/jvm 的树内容后,我更改了它并将其添加到变量部分,maven 找到了 jdk 并使用它

JAVA_HOME_13_X64 : "/usr/lib/jvm/java-13-openjdk-amd64"