Java 项目的 Azure DevOps 管道与自托管代理

Azure DevOps Pipeline for Java Project with self hosted agent

我们有一组 Java 个项目,它们是使用不同的 JDK 版本开发的,项目中使用了不同版本的 Gradle 和 Maven。

我们应该使用 Self Hosted Agent 创建一个 Azure DevOps 管道,截至目前构建代理服务器已安装 JDK 11.

如何创建管道来处理如此多的项目?我们是否需要在自托管代理或任何其他更好的方式中安装多个 JDK 版本?

是的,如果您想使用 Self Hosted Agent,您需要安装多个 JDK 版本。更好的方法是使用 Microsoft-hoseted 代理,因为它预装了某些版本的 JDK。可以参考Build environment and Build using multiple versions.

的文档

更新:

以下是我的 Gradle 使用自托管代理的示例:

1.Use java 工具安装任务:

steps:
- task: JavaToolInstaller@0
  inputs:
    versionSpec: '11'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'LocalDirectory'
    jdkFile: 'C:\jdk-11.0.10.zip'
    cleanDestinationDirectory: false
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false
- task: JavaToolInstaller@0
  inputs:
    versionSpec: '8'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'LocalDirectory'
    jdkFile: 'C:\jdk1.8.0_281.zip'
    cleanDestinationDirectory: false
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

JDK file of java 工具安装任务:

适用于 jdkSourceOption == LocalDirectory。指定包含压缩 JDK 的 jdk 存档文件的路径。该路径可以在您的源存储库中或代理上的本地路径。该文件应该是一个存档(.zip、.tar.gz、.7z),在根目录或单个目录中包含 bin 文件夹。

2.Use gradle直接任务:

steps:
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'Path'
    jdkDirectory: 'C:\Program Files\Java\jdk-11.0.10'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'build'
    publishJUnitResults: false
    javaHomeOption: 'Path'
    jdkDirectory: 'C:\Program Files\Java\jdk1.8.0_281'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

另一个答案要求 JDK 二进制文件出现在某个位置。如果没有:

      - task: BASH@3
        displayName: 'install-java8'
        inputs:
          targetType: 'inline'
          script: |
            rm -rf /opt/jdk
            mkdir /opt/jdk
            wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz
            tar -zxf OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz -C /opt/jdk
            export PATH=$PWD/jdk8u322-b06/bin:$PATH
            update-alternatives --install /usr/bin/java java /opt/jdk/jdk8u322-b06/bin/java 100 && \
            update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk8u322-b06/bin/javac 100 && \
            update-alternatives --install /usr/bin/jar jar /opt/jdk/jdk8u322-b06/bin/jar 100 && \
            echo 'export JAVA_HOME=/opt/jdk/jdk8u322-b06/' >> /etc/profile.d/java.sh
            java -version                


      - task: BASH@3
        displayName: 'verify java8 installation'
        inputs:
          targetType: 'inline'
          script: |
            source /etc/profile.d/java.sh 
            java -version
            echo $JAVA_HOME