【问题标题】:Azure DevOps Pipeline for Java Project with self hosted agent适用于 Java 项目的 Azure DevOps Pipeline 与自托管代理
【发布时间】:2021-02-09 11:27:20
【问题描述】:

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

我们应该使用Self Hosted Agent 创建一个 Azure DevOps 管道,并且到目前为止,构建代理服务器已安装 JDK 11。

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

【问题讨论】:

    标签: java azure-devops azure-devops-self-hosted-agent


    【解决方案1】:

    是的,如果您想使用 Self Hosted Agent,您需要安装多个 JDK 版本。更好的方法是使用 Microsoft 托管代理,因为它预装了一些版本的 JDK。可以参考Build environmentBuild using multiple versions的文档。

    更新:

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

    1.使用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
    

    java工具安装任务的JDK file

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

    2.直接使用gradle task:

    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
    

    【讨论】:

    • 如果我们使用自托管代理服务器,如何选择 Java 版本?
    • @Kattesang 抱歉,迟到了。请参考我在答案中的更新。
    • 如何为 gradle 做同样的事情?
    • 在我的自托管代理中,我使用 msi 安装了 JDK 11。并将 JDK 8 作为 zip 文件。我使用 Java Tool Installer 任务将版本设置为 8。Gradle 包装器属性有一行为“distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip”。但是出现错误“找不到指定的JDK版本。请确保代理上安装了指定的JDK版本,并且环境变量'JAVA_HOME_11_X64'存在并设置为相应JDK的位置或使用[Java Tool Installer]安装所需 JDK 的任务。”
    • @Kattesang 请在答案中查看我的更新。我没有在 Gradle 包装器属性文件中添加任何 distributionUrl。
    【解决方案2】:

    另一个答案要求 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2021-02-20
      • 2019-07-21
      • 2021-04-14
      • 1970-01-01
      • 2021-11-14
      • 2019-02-20
      相关资源
      最近更新 更多