创建第一个管道

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

这是分步指南,显示如何使用 Azure Pipelines 根据 Git 存储库构建示例应用程序。 本指南使用通过 YAML 管道编辑器配置的 YAML 管道。 如果要改用经典管道,请参阅定义经典管道。 有关使用 TFVC 的指导,请参阅生成 TFVC 存储库

先决条件 - Azure DevOps

确保具有以下内容:

  • GitHub 帐户,可在其中创建存储库。 免费创建一个

  • Azure DevOps 组织。 免费创建一个。 如果你的团队已创建帐户,请确保你是要使用的 Azure DevOps 项目的管理员。

  • 能够在 Microsoft 托管的代理上运行管道。 若要使用 Microsoft 托管代理,Azure DevOps 组织必须有权访问 Microsoft 托管并行作业。 可以购买并行作业,也可以请求免费授予

创建第一个管道

获取 Java 示例代码

首先,请将以下存储库分支到 GitHub 帐户中。

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

创建第一个 Java 管道

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

  2. 转到“管道”,然后选择“新建管道”或是“创建管道”(如果是首次创建管道)。

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

  4. 可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。

  5. 看到存储库列表时,请选择你的存储库。

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

  1. Azure Pipelines 将分析你的存储库,并建议使用 Maven 管道模板。

  2. 当新管道出现时,请查看 YAML 以了解其功能。 准备就绪后,选择“保存并运行”。

  3. 系统会提示将新的 azure-pipelines.yml 文件提交到存储库。 对消息没有疑问后,再次选择“保存并运行”。

    如果你要观察管道的运行情况,请选择生成作业。

    你刚刚创建并运行了我们为你自动创建的管道,因为你的代码看起来与 Maven 模板非常匹配。

    现在你的存储库中已经有一个正常工作的 YAML 管道 (azure-pipelines.yml),你可以对其进行自定义了!

  4. 准备好更改管道后,请在“管道”页面中选择该管道,然后选择“编辑”来编辑 azure-pipelines.yml 文件。

详细了解如何在管道中使用 Java

查看和管理管道

可以通过从左侧菜单中选择“管道”转到管道登录页面来查看和管理管道。

管道登录页面的屏幕截图。

在管道登录页面中,可以查看管道和管道运行、创建和导入管道、管理安全性,以及向下钻取到管道和运行详细信息。

选择“最近”可查看最近运行的管道(默认视图),选择“全部”可查看所有管道。

用于在管道登录页面上查看管道运行的选项的屏幕截图。

选择一个管道可管理该管道并查看其运行。 选择最后一个运行的生成号可查看该生成的结果,选择分支名称可查看该运行的分支,选择上下文菜单可运行管道并执行其他管理操作。

最近运行的管道的屏幕截图。

选择“运行”可查看所有管道运行。 可以选择性地筛选显示的运行。

管道运行的屏幕截图。

选择一个管道运行可查看有关该运行的信息。

可以从上下文菜单中选择“保留”或“删除”某个运行。 有关保留运行的详细信息,请参阅生成和发布保留策略

管道运行上下文菜单的屏幕截图。

查看管道详细信息

在管道的详细信息页面中可以查看和管理该管道。

管道详细信息页面的屏幕截图。

选择“编辑”可编辑管道。 有关详细信息,请参阅 YAML 管道编辑器。 还可通过在托管管道的存储库中直接修改 azure-pipelines.yml 文件来编辑管道。

查看管道运行详细信息

在管道运行摘要中,可以查看运行状态:正在运行和已完成。

管道运行摘要的屏幕截图。

在摘要窗格中,可以查看作业和阶段详细信息,下载项目,以及导航到链接的提交、测试结果和工作项。

作业和阶段

作业窗格显示阶段和作业的状态概述。 此窗格可能包含多个选项卡,具体取决于管道是同时具有阶段和作业,还是只有作业。 在此示例中,管道具有名称为“生成”和“部署”的两个阶段。 可以通过在“阶段”或“作业”窗格中选择作业,向下钻取到管道步骤。

管道作业和阶段的屏幕截图。

选择某个作业可查看该作业的步骤。

管道任务的屏幕截图。

在步骤视图中,可以查看每个步骤的状态和详细信息。 在“更多操作”中,可以切换时间戳或查看管道中所有步骤的原始日志。

管道任务内容菜单的屏幕截图。

取消和重新运行管道

如果管道正在运行,可以通过选择“取消”来取消运行。 如果运行已完成,可以通过选择“重新运行”来重新运行管道。

取消管道运行的屏幕截图。

管道运行更多操作菜单

在“更多操作”菜单中,可以下载日志、添加标记、编辑管道、删除运行,以及为运行配置保留策略。

管道运行摘要页面“更多操作”菜单的屏幕截图。

注意

你无法删除保留的运行。 如果未看到“删除”,请选择“停止保留运行”,然后删除该运行。 如果同时看到删除查看保留版本,则配置的一个或多个保留策略仍适用于该运行。 选择查看保留版本,删除策略(仅删除所选运行的策略),然后删除该运行。

将状态锁屏提醒添加到存储库

许多开发人员喜欢通过在他们的存储库中显示状态徽章来表明他们保持高代码质量。

状态锁屏提醒显示 Azure Pipelines 成功

将状态锁屏提醒复制到剪贴板:

  1. 在 Azure Pipelines 中,转到“管道”页以查看管道列表。 选择在前面的部分中创建的管道。

  2. 选择 ,然后选择“状态锁屏提醒”。

  3. 选择“状态锁屏提醒”。

  4. 从示例 Markdown 部分复制示例 Markdown。

现在,在剪贴板中使用锁屏提醒 Markdown,请在 GitHub 中执行以下步骤:

  1. 转到文件列表并选择 Readme.md。 选择铅笔图标进行编辑。

  2. 将状态锁屏提醒 Markdown 粘贴到文件开头。

  3. 提交对 main 分支的更改。

  4. 注意,状态锁屏提醒显示在存储库说明中。

为专用项目配置对锁屏提醒的匿名访问:

  1. 导航到页面左下角的“项目设置”

  2. 打开“管道”下的“设置”选项卡

  3. 在“常规”下切换“禁用对锁屏提醒的匿名访问”滑块

注意

即使在专用项目中,默认情况下也会启用匿名锁屏提醒访问。 启用匿名锁屏提醒访问后,组织外部的用户可以通过锁屏提醒状态 API 查询项目名称、分支名称、作业名称和生成状态等信息。

由于你刚刚更改了此存储库中的 Readme.md 文件,因此 Azure Pipelines 会根据存储库根目录处 azure-pipelines.yml 文件中的配置自动生成代码。 返回到 Azure Pipelines,可以看到出现了一个新的运行。 每次进行编辑时,Azure Pipelines 都会启动一个新运行。

我们将介绍如何在 Azure DevOps Server 2019 中使用经典编辑器创建输出“Hello World”的生成和发布。

先决条件

初始化存储库

如果项目中已有存储库,则可以跳到下一步:跳到将脚本添加到存储库

  1. 转到“Azure Repos”。 (上一导航中的代码中心)

    Repos 文件

  2. 如果项目为空,则会显示一个屏幕,让你将代码添加到存储库。 选择底部选项以使用 readme 文件初始化存储库:

    初始化存储库

将脚本添加到存储库

创建输出 Hello world 的 PowerShell 脚本。

  1. 转到“Azure Repos”。

  2. 添加文件。

    在“文件”选项卡上的存储库节点中,选择“新建文件”选项

  3. 在对话框中,为新文件命名并创建文件。

    HelloWorld.ps1
    
  4. 复制并粘贴此脚本。

    Write-Host "Hello world"
    
  5. 提交(保存)文件。

本教程的重点是 CI/CD,因此我们只是简单介绍了代码部分。 我们直接在 Web 浏览器中使用 Azure Repos Git 存储库。

准备好开始生成和部署实际应用时,可以通过 Azure Pipelines CI 生成使用各种版本控制的客户端和服务。 了解详细信息

创建生成管道

创建输出“Hello World”的生成管道。

  1. 选择“Azure Pipelines”,系统会自动将你转至“生成”页。

    转到“生成”选项卡

  2. 创建新管道。

    选择“生成”选项卡按钮

    如果是新 Azure DevOps 用户,则会自动将你转到 YAML 管道创建体验。 若要访问经典编辑器并完成本指南,必须关闭“新 YAML 管道创建体验”的“预览功能”:

    单击屏幕右上角的设置,然后单击预览功能

    单击切换按钮关闭 yaml 预览功能

  3. 确保源、项目、存储库和默认分支与创建脚本的位置匹配。

  4. 以“空作业”开始。

  5. 在左侧,选择“管道”并指定要使用的任何名称。 对于“代理池”,选择“托管 VS2017”。

  6. 在左侧,选择加号 ( + ) 以将任务添加到“作业 1”。 在右侧,选择“实用工具”类别,从列表中选择“PowerShell”任务,然后选择“添加”。

    将生成任务添加到作业

  7. 在左侧,选择新的“PowerShell”脚本任务。

  8. 对于“脚本路径”参数,请选择 按钮来浏览存储库,然后选择创建的脚本。

    选择你的脚本

  9. 选择“保存和队列”,然后选择“保存”

生成管道是用于定义自动生成管道的实体。 在生成管道中,编写一组任务,每个任务在生成中执行一个步骤。 任务目录提供了一组丰富的任务供你开始操作。 还可以将 PowerShell 或 shell 脚本添加到生成管道。

从生成发布生成工件

典型的生成会生成一个工件,然后可以将其部署到发布的各个阶段。 在这里,为了简单地演示该功能,我们只需将脚本作为生成工件发布。

  1. 选择“任务”选项卡,选择加号 ( + ) 以将任务添加到“作业 1”。

  2. 选择“实用工具”类别,选择“发布生成工件”任务,然后选择“添加”。

    添加发布生成工件任务

    发布路径:选择 按钮以进行浏览,然后选择创建的脚本。

    项目名称:输入“drop”。

    生成工件发布位置:选择“Azure Artifacts/TFS”。

生成工件是你希望生成最终生成的文件。 生成工件几乎可以是团队测试或部署应用所需的任何内容。 例如,你有一个 .DLL,.EXE 可执行文件和 C# 或 C++ .NET Windows 应用的 PDB 符号文件。

为了使你能够生成生成工件,我们提供了一些工具,例如使用模式匹配进行复制,以及一个暂存目录,你可以在其中收集生成工件,然后再发布生成工件。 请参阅 Azure Pipelines 中的生成工件

启用持续集成 (CI)

  1. 选择“触发器”选项卡。

  2. 启用“持续集成”。

生成管道上的持续集成触发器指示,每当提交代码更改时,系统都应自动将新生成排队。 你可以使用常规触发器,或者使用更具体的触发器,还可以计划生成(例如,每晚)。 请参阅生成触发器

保存生成并将其排队

手动保存生成并将其排队,然后测试生成管道。

  1. 选择“保存并排队”,然后选择“保存并排队”

  2. 在对话框中,再次选择“保存并排队”

    这会在 Microsoft 托管代理上将新生成排队。

  3. 页面顶部显示了新生成的链接。

    生成控制台

    选择该链接可实时观察新生成。 分配代理后,你将开始看到生成的实时日志。 注意,PowerShell 脚本作为生成的一部分运行,并且会在控制台上显示“Hello world”。

    观察生成控制台

  4. 转到生成摘要。 在生成的“生成工件”选项卡上,注意脚本作为生成工件发布。

    打开生成控制台以查看生成工件

添加一些变量并提交对脚本的更改

我们将一些生成变量传递给脚本,使我们的管道更有趣一些。 然后,我们将提交对脚本的更改,并观察 CI 管道自动运行以验证更改。

  1. 编辑你的生成管道。

  2. 在“任务”选项卡上,选择 PowerShell 脚本任务。

  3. 添加这些参数。

在生成控制台中打开 PowerShell 任务

参数

-greeter "$(Build.RequestedFor)" -trigger "$(Build.Reason)"

最后,保存生成管道。

接下来,将参数添加到脚本。

  1. 转到 Azure Repos 中的“文件”(在上一导航的代码中心和和 TFS 中)。

  2. 选择“HelloWorld.ps1”文件,然后选择“编辑”来编辑文件。

  3. 按如下所示更改脚本:

    Param(
    [string]$greeter,
    [string]$trigger
    )
    Write-Host "Hello world" from $greeter
    Write-Host Trigger: $trigger
    
  4. 提交(保存)脚本。

现在可以看到更改的结果。 转到“Azure Pipelines”并选择“已排队”。 注意,在“已排队或正在运行”部分下,你提交的更改会自动触发生成。

  1. 选择已创建的新生成并查看其日志。

  2. 请注意,更改代码的人员的姓名已显示在问候消息中。 你还会看到显示此内容的是 CI 生成。

生成摘要 PowerShell 脚本日志

我们刚刚在这些步骤中介绍了生成变量的概念。 我们输出了由系统自动预定义和初始化的变量的值。 还可以定义自定义变量,并在任务的参数中使用这些变量,或将其用作脚本中的环境变量。 若要了解有关变量的详细信息,请参阅生成变量

你已有一个生成管道。 后续步骤

你已创建一个生成管道,该管道可自动生成并验证团队签入的任何代码。 此时,可以继续学习下一部分,了解发布管道。 或者,如果愿意,可以跳到为应用创建生成管道。

创建发布管道

定义分两个阶段运行脚本的过程。

  1. 转到“管道”选项卡,然后选择“发布”。

  2. 选择“操作”,创建一个新的管道。 如果已创建发布管道,请选择加号 ( + ),然后选择“创建发布管道”。

  3. 选择要以“空作业”开始的操作。

  4. 将阶段命名为“QA”。

  5. 在“生成工件”面板中,选择“+ 添加”,并指定“源(生成管道)”。 选择 添加

  6. 选择“闪电”符号以触发持续部署,然后在右侧启用“持续部署触发器”。

    选择闪电符号以触发持续部署

  7. 选择“任务”选项卡,然后选择“QA”阶段。

  8. 选择作业的加号 ( + ),将任务添加到作业。

  9. 在“添加任务”对话框中,选择“实用工具”,找到“PowerShell”任务,然后选择“添加”按钮。

  10. 在左侧,选择新的“PowerShell”脚本任务。

  11. 对于“脚本路径”参数,请选择 按钮来浏览生成工件,然后选择创建的脚本。

  12. 添加这些参数:

    -greeter "$(Release.RequestedFor)" -trigger "$(Build.DefinitionName)"
    
  13. 在“管道”选项卡上,选择“QA”阶段,然后选择“克隆”。

    克隆 QA 中的发布环境

  14. 将克隆阶段重命名为“生产”。

  15. 将发布管道重命名为“Hello world”。

    将发布管道重命名为“hello world”

  16. 保存发布管道。

发布管道是部署应用程序生成工件的一系列阶段。 它还定义了每个阶段的实际部署管道,以及如何将生成工件从一个阶段推进到另一个阶段。

另请注意,我们在脚本参数中使用了一些变量。 在本例中,我们使用发布变量而不是用于生成管道的生成变量。

部署发布

在每个阶段运行脚本。

  1. 创建新发布。

    创建发布 - DevOps 2019 和 2020

    显示“新建发布”时,选择“创建”。

  2. 打开创建的发布。

    已创建的发布 - DevOps 2019 和 2020

  3. 查看日志以获取有关发布的实时数据。

    发布日志 - DevOps 2019 和 2020

可以跟踪每个发布的进度,以查看是否已将其部署到所有阶段。 可以跟踪每个发布的提交、关联的工作项以及已添加到发布管道的任何测试运行的结果。

更改代码并观察它自动部署到生产环境

我们将再次对脚本进行更改。 这一次,将自动生成,然后一直部署到生产阶段。

  1. 转到代码中心的“文件”选项卡,编辑“HelloWorld.ps1”文件,并按如下所示进行更改:

    Param(
    [string]$greeter,
    [string]$trigger
    )
    Write-Host "Hello world" from $greeter
    Write-Host Trigger: $trigger
    Write-Host "Now that you've got CI/CD, you can automatically deploy your app every time your team checks in code."
    
  2. 提交(保存)脚本。

  3. 选择“生成”选项卡,查看生成已排队并运行。

  4. 生成完成后,选择“发布”选项卡,打开新的发布,然后转到 “日志”。

新代码会自动部署在“QA”阶段,然后部署到“生产”阶段。

发布脚本步骤最终日志 - DevOps 2019 和 2020

在许多情况下,你可能希望编辑发布管道,以便生产部署仅在某些测试和审批到位后进行。 请参阅审批和入口概述

后续步骤

你刚刚了解了如何在 Azure 中创建你的第一个管道。 详细了解如何在所选语言中配置管道:

或者,你也可以继续自定义该管道

若要在容器中运行管道,请参阅容器作业

若要详细了解如何生成 GitHub 存储库,请参阅生成 GitHub 存储库

若要了解如何发布管道工件,请参阅发布管道工件

若要了解可在 YAML 管道中执行的其他操作,请参阅 YAML 架构参考

清理

如果创建了任何测试管道,则使用完这些管道后,可以轻松将其删除。

若要删除管道,请导航到该管道的摘要页,然后从页面右上角的“...”菜单中选择“删除”。 键入管道名称进行确认,然后选择“删除”。

删除管道

你已了解创建和运行管道的基础知识。 现在,你已准备好为所使用的编程语言配置生成管道。 继续创建新的生成管道,这次使用下列模板之一。

语言 要使用的模板
.NET ASP.NET
.NET Core ASP.NET Core
C++ .NET 桌面
Go Go
Java Gradle
JavaScript Node.js
Xcode Xcode

FAQ

在哪里可以阅读有关 DevOps 和 CI/CD 的文章?

什么是持续集成?

什么是持续交付?

什么是 DevOps?

可以使用哪个版本控制系统?

准备好为应用使用 CI/CD 后,可以使用所选的版本控制系统:

如何复制管道?

如果管道具有要在其他管道中复制的模式,请克隆、导出或将其另存为模板。

all-definitions-build-action-menu-replicate-actions

克隆管道后,可以进行更改,然后保存管道。

导出管道后,可以从“所有管道”选项卡导入该管道。

创建模板后,你的团队成员可以使用该模板来遵循新管道中的模式。

提示

如果使用的是“新生成编辑器”,则自定义模板将显示在列表底部。

如何使用草稿?

如果你正在编辑生成管道,并且想要测试一些尚未准备好用于生产的更改,则可以将其保存为草稿。

另存为草稿

可以根据需要编辑和测试草稿。

编辑草稿 - DevOps 2019 和 2020

准备就绪后,可以发布草稿以将更改合并到生成管道中。

发布草稿 - DevOps 2019 和 2020

或者,如果决定放弃草稿,可以从上面显示的“所有管道”选项卡中将其删除。

如何删除管道?

若要删除管道,请导航到该管道的摘要页,然后从页面右上角的“...”菜单中选择“删除”。 键入管道名称进行确认,然后选择“删除”。

在对生成进行排队时,还可以执行哪些操作?

可以自动或手动将生成排队。

手动将生成排队时,对于生成的单次运行,可以:

可以自动或手动将生成排队。

手动将生成排队时,对于生成的单次运行,可以:

我可以在何处了解管道设置的详细信息?

要详细了解管道设置,请参阅:

如何以编程方式创建生成管道?

REST API 参考:创建生成管道

注意

还可以使用 Azure Pipelines CLI 从命令行或脚本管理生成和生成管道。