Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
使用 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
对于 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
对于 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
对于 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 管道: