生成 Java 应用

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

可以使用管道自动执行以下操作:

如果你正在处理 Android 项目,请参阅生成、测试和部署 Android 应用

先决条件

若要运行以下示例,必须具有:

  • GitHub 帐户,可在其中创建存储库。 免费创建一个
  • 访问 Azure DevOps Server 集合。
  • 能够在 Azure DevOps 自托管代理上运行 Azure Pipelines。
  • 一个 Azure DevOps 项目。 如果没有项目,现在请创建一个项目

创建 GitHub 存储库

将以下存储库分支到 GitHub 帐户:

https://github.com/MicrosoftDocs/pipelines-java

创建管道

  1. 登录到你的 Azure DevOps 组织,并转到你的项目。

  2. 如果在项目中创建第一个管道,请转到“管道”,然后选择“新建管道”或“创建管道”

  3. 执行向导中的步骤。首先选择“GitHub”作为源代码位置。 可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。

  4. 选择你的存储库。 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择批准并安装

  5. 看到“配置管道”选项卡时,请选择“Maven”、“Gradle”或“Ant”,具体取决于你要如何生成代码

  6. 在存储库中创建包含管道定义的 azure-pipelines.yml 文件,并在 YAML 编辑器中打开。 可以通过添加更多任务或修改现有任务来自定义管道。 有关生成任务的详细信息,请参阅生成代码

  7. 编辑完azure-pipelines.yml后,选择“保存并运行”

  8. 若要将 azure-pipelines.yml 文件提交到存储库,请再次选择“保存并运行”

选择“作业”可观察管道的运行情况。

  1. 转到集合,并选择项目。

  2. 如果在项目中创建第一个管道,请选择“管道”,然后选择“新建管道”或“创建管道”

  3. 完成向导中的各个步骤。首先选择 GitHub Enterprise Server 作为源代码位置。

  4. 使用现有的 GitHub 服务连接或创建新的 GitHub 服务连接。

    若要创建服务连接:

    1. 选择连接到 GitHub Enterprise Server
    2. 输入 GitHub Enterprise Server URL。
    3. 输入 GitHub Enterprise Server 个人访问令牌。 如果没有个人访问令牌,可以在 GitHub Enterprise Server 帐户中创建一个。 有关详细信息,请参阅创建个人访问令牌
  5. 选择存储库。 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择批准并安装

  6. 看到“配置管道”选项卡时,请选择“Maven”、“Gradle”或“Ant”,具体取决于你要如何生成代码

  7. 在存储库中创建包含管道定义的 azure-pipelines-yml 文件,并在 YAML 编辑器中打开。 可以通过添加更多任务或修改现有任务来自定义管道。 有关生成任务的详细信息,请参阅生成代码

  8. 编辑完azure-pipelines.yml后,选择“保存并运行”

  9. 若要将 azure-pipelines.yml 文件提交到存储库,请再次选择“保存并运行”

选择“作业”可观察管道的运行情况。

现在你的存储库中有一个可用的 YAML 管道 (azure-pipelines.yml),你可以对其进行自定义! 要更改管道,请在“管道”页面中选择它,然后选择“编辑”来编辑 azure-pipelines.yml 文件。

生成环境

可以使用 Azure Pipelines 生成 Java 应用,而无需设置自己的任何基础结构。 可以在 Windows、Linux 或 macOS 映像上生成。 Azure Pipelines 中的 Microsoft 托管代理预装了适用于 Java 的新式 JDK 和其他工具。 若要了解安装了哪些 Java 版本,请参阅 Microsoft 托管的代理

要选择适当的映像,请更新 azure-pipelines.yml 文件中的以下代码片段。

pool:
  vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'

有关映像的完整列表,请参阅 Microsoft 托管的代理

除了使用 Microsoft 托管的代理之外,还可以设置装有 Java 的自托管代理。 如果你有大型存储库或者可以运行增量生成,则也可以使用自托管代理来节省时间。

生成将在自托管代理上运行。 确保在代理的主机上安装了 Java 和使用所选方法进行构建所需的工具。

可以在管道编辑器的“选项”选项卡的“代理池”和“代理规范”部分中选择代理池和代理功能。

例如,若要指定代理池和具有 Maven 功能的代理,请将以下代码片段添加到 azure-pipelines.yml 文件中。

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

自定义生成路径

如果 pom.xml 文件不在存储库的根目录中,请调整 mavenPomFile 值。 文件路径值应相对于存储库的根目录,例如 IdentityService/pom.xml$(system.defaultWorkingDirectory)/IdentityService/pom.xml

自定义 Maven 目标

将 goals 值设置为 Maven 要执行的目标的空格分隔列表,例如 clean package。 有关常见 Java 阶段和目标的详细信息,请参阅 Apache 的 Maven 文档

Gradle

对于 Gradle 生成,会将以下任务添加到 azure-pipelines.yml 文件中。 有关这些选项的详细信息,请参阅 Gradle 任务。

steps:
- task: Gradle@2
  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 版本。

调整生成路径

如果 gradlew 文件不在存储库的根目录中,请调整 workingDirectory 值。 目录值应相对于存储库的根目录,例如 IdentityService$(system.defaultWorkingDirectory)/IdentityService

如果 gradlew 文件不在存储库的根目录中,请调整 gradleWrapperFile 值。 文件路径值应相对于存储库的根目录,例如 IdentityService/gradlew$(system.defaultWorkingDirectory)/IdentityService/gradlew

调整 Gradle 任务

调整 Gradle 应执行的任务的 tasks 值,例如 buildcheck。 有关 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: 步骤使用 Bash(在 Linux 和 macOS 上)或命令提示符(在 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 包或要部署到 Web 应用程序的 .war/jar 文件中打包和发布应用。

详细了解如何为部署目标创建 CI/CD 管道: