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
我们有一组 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