Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
使用 Azure Pipelines 自动执行 Java 应用程序的生成、测试和部署。 本文介绍如何使用 Maven、Gradle 或 Ant 等工具为 Java 项目设置管道。 你还将了解如何将应用部署到 Azure 服务,例如应用服务、Functions 或 Kubernetes。
使用管道来:
- 使用 Maven、 Gradle 或 Ant 生成项目。
- 运行测试和代码分析工具。
- 使用管道和 Azure Artifacts 发布应用。
- 将应用部署到 Azure 应用服务、 Azure Functions 或 Azure Kubernetes 服务。
如果使用的是 Android 项目,请参阅 生成、测试和部署 Android 应用。
先决条件
产品 | 要求 |
---|---|
Azure DevOps | - Azure DevOps 项目。 - 能够在 Microsoft 托管的代理上运行管道。 可以购买并行作业,也可以请求免费层。 - 对 YAML 和 Azure Pipelines 的基本知识。 有关详细信息,请参阅 创建第一个管道。 - 权限: - 若要创建管道:必须位于 “参与者 ”组中,并且该组需要将 “创建生成管道 ”权限设置为“允许”。 项目管理员组的成员可以管理管道。 - 若要创建服务连接:必须具有服务连接的管理员或创建者角色。 |
GitHub | - GitHub 帐户。 - 用于授权 Azure Pipelines 的 GitHub 服务连接 。 |
天蓝色 | 一个 Azure 订阅。 |
产品 | 要求 |
---|---|
Azure DevOps | - Azure DevOps 项目。 - 自托管代理。 若要创建一个代理,请参阅 自承载代理。 - 对 YAML 和 Azure Pipelines 的基本知识。 有关详细信息,请参阅 创建第一个管道。 - 权限: - 若要创建管道:必须位于 “参与者 ”组中,并且该组需要将 “创建生成管道 ”权限设置为“允许”。 项目管理员组的成员可以管理管道。 - 若要创建服务连接:必须具有服务连接的管理员或创建者角色。 |
GitHub | - GitHub 帐户。 - 用于授权 Azure Pipelines 的 GitHub 服务连接 。 |
天蓝色 | 一个 Azure 订阅。 |
创建 GitHub 存储库
将以下存储库分叉到 GitHub 帐户:
https://github.com/MicrosoftDocs/pipelines-java
创建管道
登录到 Azure DevOps 组织,并转到项目。
如果在项目中创建第一个管道,请转到“管道”,然后选择“新建管道”或“创建管道”。
按照向导步骤作,首先选择 GitHub 作为源代码的位置。 可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。
选择存储库。 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择 “批准”并安装 以继续。
看到“ 配置管道 ”选项卡时,请选择 Maven、 Gradle 或 Ant ,具体取决于要 如何生成代码。
在存储库中创建包含管道定义的文件
azure-pipelines.yml
,并在 YAML 编辑器中打开。 可以通过添加更多任务或修改现有任务来自定义管道。 有关生成任务的详细信息,请参阅 生成代码。编辑完
azure-pipelines.yml
后,选择“保存并运行”。若要将
azure-pipelines.yml
文件提交到存储库,请再次选择“保存并运行”。
选择“作业”可观察管道的运行情况。
转到集合,并选择项目。
如果在项目中创建第一个管道,请选择“管道”,然后选择“新建管道”或“创建管道”。
首先选择 GitHub Enterprise Server 作为源代码的位置,执行向导的步骤。
使用现有的 GitHub 服务连接或创建新的 GitHub 服务连接。
若要创建服务连接:
- 选择“ 连接到 GitHub Enterprise Server”。
- 输入 GitHub Enterprise Server URL。
- 输入 GitHub Enterprise Server 个人访问令牌。 如果没有个人访问令牌,可以在 GitHub Enterprise Server 帐户中创建一个。 有关详细信息,请参阅 创建个人访问令牌。
选择存储库。 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择“ 批准并安装”。
看到“ 配置管道 ”选项卡时,请选择 Maven、 Gradle 或 Ant ,具体取决于要 如何生成代码。
在存储库中创建包含管道定义的文件
azure-pipelines.yml
,并在 YAML 编辑器中打开。 可以通过添加更多任务或修改现有任务来自定义管道。 有关生成任务的详细信息,请参阅 生成代码。编辑完
azure-pipelines.yml
后,选择“保存并运行”。若要将
azure-pipelines.yml
文件提交到存储库,请再次选择“保存并运行”。
选择“作业”可观察管道的运行情况。
现在你的存储库中已经有一个正常工作的 YAML 管道 (azure-pipelines.yml
),你可以对其进行自定义了! 要更改管道,请在“管道”页面中选择它,然后选择“编辑”来编辑 azure-pipelines.yml
文件。
生成环境
使用 Azure Pipelines 在不设置基础结构的情况下生成 Java 应用。 在 Windows、Linux 或 macOS 映像上生成。 Azure Pipelines 中由 Microsoft 托管的代理已预装现代 JDK 和其他 Java 工具。 若要检查安装了哪些版本的 Java,请参阅 Microsoft托管的代理。
通过更新文件 azure-pipelines.yml
中的以下代码片段来选择相应的图像。
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
有关映像的完整列表,请参阅 Microsoft 托管的代理。
作为Microsoft托管代理的替代方法,请设置安装了 Java 的 自承载代理 。 如果你有大型存储库或运行增量生成,请使用自承载代理来节省时间。
构建在 自承载代理上运行。 确保在代理的主机上安装所选生成方法所需的 Java 和工具。
可以在管道编辑器的“选项”选项卡的“代理池”和“代理规范”部分中选择代理池和代理功能。
例如,通过将以下代码片段添加到 azure-pipelines.yml
文件来指定代理池和具有 Maven 功能的代理。
pool:
name: MyPool
demands: maven
生成代码
可以使用 Maven、Gradle、Ant 或脚本生成 Java 应用程序。 以下各部分介绍如何为每个方法向管道添加生成步骤。
行家
对于 Maven 构建,请将以下任务添加到 azure-pipelines.yml
文件中。 替换值以匹配项目。 有关任务选项的详细信息,请参阅 Maven 任务。
steps:
- task: Maven@4
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: 'default'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
goals: 'package'
对于 Spring Boot,也可以使用 Maven 任务。 确保 mavenPomFile
值反映了 pom.xml
文件的路径。 例如,如果使用 Spring Boot 示例存储库,则路径为 complete/pom.xml
。
自定义生成路径
mavenPomFile
如果pom.xml
文件不在存储库的根目录中,请设置该值。 文件路径值必须相对于存储库的根目录,例如 IdentityService/pom.xml
或 $(system.defaultWorkingDirectory)/IdentityService/pom.xml
。
自定义 Maven 目标
将 goals 值设置为 Maven 要执行的目标的空格分隔列表,例如 。 有关常见 Java 阶段和目标的详细信息,请参阅 Apache 的 Maven 文档。
格拉德尔
对于 Gradle 构建,请将以下任务添加到 azure-pipelines.yml
文件中。 有关这些选项的详细信息,请参阅 Gradle 任务。
steps:
- task: Gradle@3
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: 'default'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
Gradle 包装器
gradlew
确保文件位于存储库中。 如果不是,请通过在项目的根目录中运行 gradle wrapper
来生成它。 有关创建 Gradle 包装器的信息,请参阅 Gradle。
选择 Gradle 版本
除非存储库的 gradle/wrapper/gradle-wrapper.properties
文件包含一个指定了要在生成期间下载并使用的其他 Gradle 版本的 distributionUrl
属性,否则将使用代理计算机上安装的 Gradle 版本。
调整生成路径
workingDirectory
如果gradlew
文件不在存储库的根目录中,请设置该值。
目录值应相对于存储库的根目录,例如 IdentityService
或 $(system.defaultWorkingDirectory)/IdentityService
。
如果 gradleWrapperFile
文件不在存储库的根目录中,请调整 gradlew
值。 文件路径值应相对于存储库的根目录,例如 IdentityService/gradlew
或 $(system.defaultWorkingDirectory)/IdentityService/gradlew
。
调整 Gradle 任务
调整 Gradle 应执行的任务的 tasks 值,例如 或 build
。 有关 Gradle 的常见 Java 插件任务的详细信息,请参阅 Gradle 的文档。
蚂蚁
对于 Ant 生成,会将以下任务添加到 azure-pipelines.yml
文件。 更改值(例如 build.xml
文件的路径),使之与项目配置匹配。 有关这些选项的详细信息,请参阅 Ant 任务。 如果使用示例存储库,则需要在存储库中提供 build.xml
文件。
steps:
- task: Ant@1
inputs:
workingDirectory: ''
buildFile: 'build.xml'
javaHomeOption: 'JDKVersion'
jdkVersionOption: 'default'
jdkArchitectureOption: 'x64'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
脚本
若要使用命令行或脚本进行生成,请将其中一个代码片段添加到 azure-pipelines.yml
文件中。
内联脚本
该 script:
步骤在 Linux 和 macOS 上使用 Bash 运行内联脚本,在 Windows 上使用命令提示符运行内联脚本。 有关详细信息,请参阅 Bash 或 命令行 任务。
steps:
- script: |
echo Starting the build
mvn package
displayName: 'Build with Maven'
脚本文件
此任务运行存储库中的脚本文件。 有关详细信息,请参阅 Shell 脚本、 Batch 脚本或 PowerShell 任务。
steps:
- task: ShellScript@2
inputs:
scriptPath: 'build.sh'
后续步骤
将生成输出发布到管道。 将应用打包并发布到 Maven 包或 .war/jar 文件,以将其部署到 Web 应用程序。
详细了解如何为部署目标创建 CI/CD 管道: