📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

AI-powered workflows with GitHub and Azure DevOps

Microsoft Reactor1:02:42

Transcription

大家好。感谢大家参加我们Agentic DevOps Live系列的下一场会议。我叫安娜。我将是本次会议的制作人。我是Reactor的活动策划者,从华盛顿州雷德蒙德向大家致意。在我们开始之前,我有一些快速的会务安排。请花点时间阅读我们的行为准则。我们致力于为我们的听众和演讲者提供一个互相尊重的环境。虽然我们绝对鼓励在聊天中互动,但我们要求您注意您的评论,保持专业和切题。请留意聊天。我们将发布有用的链接,并检查我们演讲者要回答的问题。我们的会议正在录制中。您可以在Reactor频道上按需观看。话不多说,我想把时间交给今天的演讲者。非常感谢您的加入。>> 好的。谢谢你,安娜。嗯,早上好,下午好,晚上好,取决于您在哪里以及何时观看。嗯,我叫戴夫·伯尼森。我是GitHub的高级DevOps倡导者。和我一起的是丹·赫尔姆。丹,你想介绍一下你自己吗?>> 是的,谢谢戴夫。嗯,我是丹·赫尔姆。我是Azure Boards、Azure Repos、Azure Wiki以及Azure DevOps和GitHub之间集成产品的产品经理。>> 太棒了。很高兴再次与您合作,丹。今天我们想谈谈GitHub和Azure DevOps的AI驱动工作流。现在,过去,您知道,Azure DevOps和GitHub被视为独立的选项,独立的DevOps堆栈,但情况已不再如此。嗯,现在我们将其视为一种集成您回到我的窗口的方式。好了。能够集成Azure DevOps和GitHub,这是您通往Agentic AI的道路,将AI直接带入每个开发团队成员的身边。当我们看待事物时,我们,您知道,我们有点像把您的DevOps堆栈看作一栋房子,对吧?您有不同的房间或不同的楼层。您有用于管理源代码的存储库。现在,有了它,您就可以利用GitHub Copilot,至少是您可以在IDE中利用的功能,如Visual Studio Code、Visual Studio,甚至包括Eclipse、Xcode,以及Jet Brains系列IDE。您可以引入GitHub高级安全的核心,即Azure DevOps的GitHub高级安全。毫无疑问,您知道,如果您在企业界工作,您会使用Azure Boards,但您已经自定义了Azure Boards。您在表单上有自定义字段,或者您知道自定义了表单,甚至添加了自定义工作项类型,并且您正在跨团队利用这些仪表板和汇总。您正在利用Azure管道进行CI/CD,部署到Azure Kubernetes服务或Azure Web应用,并利用模板来确保满足您所有的合规性需求。利用Azure测试计划进行手动测试跟踪。现在我们有了更好的集成,可以自动分配测试计划中的自动化测试,以便您可以跟踪事物,而且在过去一年左右的时间里,Azure测试计划的投资一直在增加,然后是Azure Artifacts的工件管理。现在,很多人认为GitHub就像一个整体的另一栋房子。是的,它有用于管理源代码的存储库,与Azure Repos非常相似,但现在GitHub平台本身内置了更多GitHub Copilot的功能。无论是Copilot编码代理,还是GitHub企业云用户界面上的代理选项卡,还是GitHub高级安全工具的完整套件,包括像C-pilot自动修复这样的功能,能够让Copilot建议并修复代码扫描发现的漏洞,或者您知道,项目中的问题,项目中的问题对许多企业来说并不像Azure Boards那样功能丰富,具有可配置的仪表板和所有自定义功能等。GitHub Actions用于CI/CD,与Azure管道非常相似,但仍然存在一些差异,特别是如果您正在利用模板。GitHub有可重用的工作流和功能,但如果您已经投资了Azure管道中的模板,您可能希望暂时继续使用它们,并考虑将GitHub Actions作为未来的选择。GitHub实际上没有什么与Azure测试计划类似的东西。它确实有用于工件管理的GitHub软件包,但是,您知道,过去您可能认为,哦,哇,我需要迁移所有这些。就像搬到一个新房子一样。所以,您知道,我得搬走所有东西,而不仅仅是零碎的东西。然后我得看看我的第三方集成。当您搬到一个新房子时,这些第三方集成是,我的医生在同一个社区吗?我的孩子会去同一所学校吗?您知道,对于第三方集成,您正在考虑部署到Azure。如果您使用Jrog Artifactory或其他工具,您将不得不重新连接所有这些第三方集成。但这并不是我们要求您做的。所以,与其搬到一个新房子,不如把它看作是改造厨房。我的意思是,我们将直接把GitHub和Azure DevOps整合到同一个屋檐下。所以,如果我们改造一楼,改造厨房,我们将考虑将我们的Azure Repos迁移到GitHub Repos,但与Azure Boards和Azure管道等集成。这很棒,因为它使我们能够充分利用所有Copilot功能,例如Copilot编码代理,以及,您知道,能够在GitHub企业云上进行Copilot聊天。所以,就在主用户界面上,充分利用所有GitHub高级安全功能,包括Agentic功能,如或基于AI的功能,如Copilot自动修复,利用安全活动,因此代码扫描,秘密扫描可能发现了很多问题和漏洞,引入安全团队并创建一个安全活动,帮助您优先处理需要解决的问题。首先解决和修复,并利用Copilot自动修复来为您解决这些问题。在管道和GitHub Actions方面,实际上有一些方法可以使用GitHub Actions,而您无法使用Azure管道。所以,将会有一些场景,您将同时使用GitHub Actions和Azure管道,甚至考虑GitHub Actions。您是否想长期走向那里?但是通过改造厨房而不是搬家,您可以决定何时以及是否要将内容迁移到GitHub Actions。好了。现在,这实际上不是新消息。这篇博文来自去年11月。丹和我曾有幸在Microsoft Ignite上做过演讲,一个非常非常相似的会议。但是,领导Azure DevOps团队的Rajes现在发布了这篇博文,他说:“现在是迁移您的存储库到GitHub的理想时机,这样您的团队就可以充分利用Copilot的Agentic能力,同时仍然受益于您在Azure Boards和Azure管道方面的现有投资。”但即使如此,这也不是新消息。我们已经说了超过一年了,分析师也同意。去年6月发布的DevOps平台Forrester Wave将Microsoft、GitHub和Azure DevOps置于领导者区域的远右上方。所以,这里有一个二维码,但作为本次会议的后续消息,我们将提供本次演示的PDF。所以,您拥有所有这些二维码。您将看到其他链接,如这篇博文,直接嵌入在此会议中。现在,我们正在努力让您尽可能轻松。我们已经构建了工具来帮助将存储库从Azure Repos迁移到GitHub。GitHub企业导入器还将连接Azure Boards和Azure管道的集成,您知道,稍后我将包含一个链接,说明我们有一个动手实验室,您可以在其中亲自尝试并开始规划如何做到这一点。但也有Microsoft专家、GitHub专家、合作伙伴,他们都经过了良好的培训。事实上,我们已经进行了,我不知道确切的数字,但可能已经为Vodafone、Accenture、Ernstston Young、Phillips等企业迁移了数十万个存储库,您可以通过这些链接阅读他们关于结合Azure DevOps和GitHub的一些推荐。那么我们正在看什么呢?即使在迁移存储库之前,您也可以利用C-pilot Business或C-pilot Standalone Enterprise,这意味着您可以在Visual Studio、Visual Studio Code、Jet Brains、Eclipse、Xcode中使用Copilot,并开始通过Agent模式等Agentic DevOps进入这些IDE的聊天中。您可以利用GitHub高级安全的核心,即Azure DevOps的GitHub高级安全。所以您将拥有代码扫描、带有推送保护的秘密扫描、依赖项扫描,确保您通过Nugget、Maven、npm等引入的所有库都没有已知的漏洞,并在需要时帮助您升级这些依赖项。但关键是,当您将存储库迁移到GitHub时,您就可以充分利用GitHub Copilot和GitHub高级安全所提供的一切。稍后,我将确切地展示我们所说的内容。但在此之前,我想把时间交给丹,让他谈谈,您知道,在这个混合世界中的Azure DevOps。>> 好的。谢谢。所以,我将快速浏览一下我们过去几年里投资的一些东西,然后通过一些演示来重点介绍我们最近的一些投资。所以,只是为了一个整体的视图,关于Azure DevOps加上GitHub混合模式意味着什么,有几件事,对吧?所以第一个是关于管道,对吧?您知道,如果您将存储库移到GitHub,您仍然可以轻松运行您现有的管道,对吧?所以这是最大的一个。另一个是关于可追溯性和工作项,所以能够打开一个工作项,定义它,并将其链接到您的GitHub分支、您的GitHub提交、您的GitHub拉取请求,当您的管道在与您的工作项连接的存储库上运行时,能够看到工作项上的构建链接。所以所有您期望的可追溯性,就像您的代码在Azure Repos中一样,所有这些相同的东西都已转移过来,如果您的代码现在在GitHub Repos中。嗯,所以我们在这些两个主要领域进行了大量的投资。但我们也做了很多关于规模改进的事情。所以,我认为,您知道,当我们第一次一起进行这种集成时,它确实已经有六七年了。嗯,您知道,我们开始允许您将500个存储库连接到一个特定的Azure DevOps项目。我们现在正在推出能够连接2000个存储库的能力。所以,随着越来越多的客户进入产品,越来越多的客户采用混合模式,我们一直在不断改进以适应规模,并能够为拥有更多存储库需求的更大客户提供规模。另一件事要指出的是,我们现在支持带有数据驻留的GitHub企业云。所以,如果您在GitHub中使用它,您可以,我所说的所有关于管道和工作项之间集成的事情,当您连接到带有数据驻留的GitHub企业云时,所有这些都有效。然后,我们还包括,为了让许可更容易一些,当您获得GitHub企业许可证时,它会自动附带一个Azure DevOps Basic许可证。所以,您知道,历史上人们不得不购买两个许可证,这非常麻烦。现在,如果您只需要一个GitHub企业许可证,它会自动获得一个Azure DevOps Basic许可证,无需额外费用。然后最后两项可能是我们投资最多且仍在继续投资的新事物之一。其中之一是关于我们的Azure DevOps MCP服务器。我稍后会详细介绍一下。但过去六个月左右,我们已经启用了本地MCP服务器,并且我们目前正在开发一个远程服务器。另一个是GitHub Copilot for Azure Boards。这是我稍后将要演示的,它允许您打开一个工作项,将其分配给Copilot,然后它会为您完成工作,并且在它和您的工作项之间存在一种体验。>> 好的。下一张幻灯片。嗯,我认为我们已经谈过这个问题了,但是,您知道,集成的一个主要要点是能够继续使用您的管道。当您的代码移到GitHub时。所以,当您将这些存储库移过去时,您继续进行CI/CD管道。您继续看到您的管道、工作项和代码之间的完整可追溯性。然后,同样的事情,我们再次谈论的是关于Boards。嗯,您知道,我们已经进行了大量的投资。有很多视频,我不会详细介绍我们所做的所有不同类型的集成。但基本上,我可以打开一个工作项,并将其分配给,您知道,GitHub分支、拉取请求、提交。我可以从工作项创建分支。我也可以反过来做。如果我在GitHub中的拉取请求中,我可以将其链接回工作项。我稍后会在这里展示一些这些细节。最后,当我们谈论集成时,再次,我们做的一个更新的事情是与GitHub Copilot的集成。所以,这允许我打开一个工作项,定义该工作项,并将其分配给Copilot。然后Copilot会为您完成工作。显然,您的存储库需要位于GitHub中才能完成此操作。然后,您知道,一旦一切都完成并且它完成了工作,它会回来通知您。所以,我们将在演示中进行演示。最后,在进入演示内容之前,只是想谈谈MCP服务器中有什么。所以,MCP服务器的目的是将上下文带入您正在做的任何事情中,无论您是使用Visual Studio和Copilot,还是使用Cloud,还是创建自己的代理,都是为了将上下文从Azure DevOps带入该环境或该代理中。您可以做一些事情,对吧?所以,我们允许您引入工作项、Wiki、测试计划、存储库和管道等内容。所以,您在Azure DevOps中看到的所有主要部分都可以带入上下文中。然后,它允许您利用Copilot的力量,使用AI来做决策,查看事物,甚至直接通过Copilot创建工作项和更新项。所以,今天我们只有一个本地MCP服务器。我们正在开发一个远程服务器。我们将在接下来的六周左右的时间里在博文和我们的发布说明中发布一些公告。所以,现在,您知道,MCP服务器,本地服务器,与Visual Studio Copilot和Visual Studio Code配合得很好,我指的是GitHub Copilot和Visual Studio Code。这可能是您使用它的最佳环境。但它也适用于其他工具,例如,您知道,Visual Studio、Cloud Desktop、Cloud Code、Cursor、GitHub Copilot CLI等。所以,在第二个链接中有大量信息,其中存储库是您可以查看的,如果您查看它,有大量的说明如何设置和使用它,以及视频和您可以做的事情。我稍后会通过几个视频来介绍这些。好了,让我们开始演示吧。所以,第一个我们将从整体的GitHub集成以及它如何与Copilot协同工作开始。所以,让我开始,只是打开一个工作项。所以,这里有一个工作项,它只有一个非常简短的描述,显然。所以,我想,我已经将它链接到了我在GitHub中的存储库,我想做的是,我想基本上将这个工作项分配给Copilot,让它为我做一些工作。在这种情况下,我想更新一个特定的背景颜色。我想更改一些链接。您知道,相当直接的事情。所以,想法是,我可以直接在这里创建一个新的拉取请求,使用GitHub Copilot。当我这样做时,它将进行身份验证,确保我拥有GitHub Copilot许可证。所以,这是要求之一。然后它将拉取我已经连接到此项目的存储库。所以,在这种情况下,我有多个,但它会记住我上次使用的那个,也就是我正在处理的这个demo.net。然后我也可以选择我的分支。嗯,我们正在推出的一个新功能。它已经推出了一半。这允许我选择一个自定义编码代理,如果我想使用它的话。这是列表中的另一个选择项,就像我说的,它正在推出。然后我可以根据需要输入一些特殊说明。所以,我将继续进行并创建这个,并展示一下它的工作方式。所以,它开始运行了。您可以看到Copilot已经开始工作了。我应该很快会看到它为我创建了一个分支,并且也为我创建了一个拉取请求。所以,如果我打开拉取请求,嗯,这些拉取请求显然需要几分钟时间,但我想指出几件事。所以,这里您可以看到原始提示。我们发送工作项的详细信息,基本上是描述,任何大的文本文件。所以,无论是描述、存储库步骤,如果您在工作项本身中使用某种自定义字段,它都会带过来,然后它还会带过来最近的50条评论。所以,所有这些信息都用于Copilot的上下文,用于进行代码更改。将自动链接工作项。所以,您可以看到工作项已链接。如果我想点击下面的链接,它实际上也会打开工作项本身。然后它将开始工作。所以,它将启动,您知道,代理将启动一个会话。很多时候,这些会话需要,您知道,五到十分钟,十五分钟,取决于您在做什么。我将回去展示一个我已经开始的,它基本上是我刚才那个的副本。所以,这里我正在看我拥有的那个。我将查看拉取请求。您可以看到,它为我做了一些更改。它说将背景颜色从特定颜色更改为浅蓝色。检查链接。做了一些小的更改等等。从这里,嗯,现在由我来启用它,准备好,您知道,它最初是草稿模式,所以我可以打开它并将其设置为非草稿模式。所以,它已准备好进行审查。然后,一个人会进行审查,然后我们会进行合并。所以,这里我将确认合并。现在,如果我回到我的工作项,您将看到它会自动生成提交,合并提交,这显然很重要,因为它是在PR完成后进行的。所以,它能够做到这一点,因为我已经自动链接了AV磅。我已经链接了分支。所以,我们正在自动进行很多这些链接。我不需要手动为自己做。如果我想的话,我当然可以进来添加另一个链接到不同的分支,或者我可以做另一个提交。基本上,只需点击添加链接分支。我选择存储库,选择分支,或者再次,如果我做提交,它会做几乎相同的事情,存储库,然后这里是不同的提交列表,我可以选择。所以,一旦我们进行合并提交,我将回到这里说,好的,所有这些都很好。我想继续删除分支。通过这样做,再次,我将回到这里,它将自动删除该链接。所以,您可以看到很多事情只是自动为我发生的。然后,我还有一个在后台运行的构建,并且刚刚成功,并自动将该构建链接到工作项。最终,您知道,我们完成它,关闭它,我认为我认为这就是我想要展示的全部内容。我以为我还有一件事想在这上面展示,但我已经为我创建了构建分支。所以,所以,这基本上就是流程,对吧?我打开一个工作项,我定义该工作项,它获取该工作项的所有内容,将其发送给编码代理,编码代理为我完成工作,链接我想要链接的所有内容,然后让我知道它何时完成,然后允许我手动审查它,合并它,然后完成它。您还注意到这里有一个小图标,我们在这里跟踪何时事物仍在工作。所以,我实际上可以在我的看板上显示哪些项目正在运行代理,哪些项目没有运行代理,哪些项目正在等待,哪些项目已准备好让我查看和审查。这是第一个演示。嗯,第二个我想介绍的是MCP服务器。所以在开始MCP服务器演示之前,它有点搞笑,因为有时需要一段时间。所以我实际上有几个视频,我以快进模式进行了演示。但我至少想快速向您展示这些东西是如何工作的。所以,这里我有一个新存储库,我们创建了它,名为Azure DevOps Skills,它允许我定义许多不同的技能。我们只是向人们展示它可能如何工作。但我所做的是,为了让MCP服务器工作,我基本上是在我的VS Code文件夹中创建一个MCP.json。从这里,我基本上只是添加了它将引入的MPM包。我正在定义,您可以看到我已经设置了我的组织名称。我还有其他一些可以做的身份验证。我们还有一个叫做域的东西,如果我只想看到一定数量的工具,我可以限制出现在客户端中的工具数量。但您可以看到设置相当简单,对吧?它只是定义,只是说嘿,我想连接到MCP服务器,然后定义我想要使用的组织,然后它将开始处理该组织。现在,我想展示一下这些技能是如何工作的,因为这是我将要展示的几个例子。所以,技能基本上就是一套指令、资源,您也可以有JavaScript文件。但在这里,我基本上定义了我想做什么,我想运行该技能,然后我想让LM去做什么,处理什么,以及我想使用什么工具。所以,在这种情况下,如果我说我想获取我的工作项,我提供一些关于它的上下文,确保我有一个项目,因为显然我可以有多个项目,而工作项是特定于项目的。我还可以说,这些是我关心的工具。我想当我获取工作项时,这些是我关心的字段,然后当我显示工作项时,我想这样显示它们,等等。所以,所以相当简单。我还有几个不同的技能。我有一个关于我的工作的技能。我有一个关于总结的技能。我有一个关于创建工作项的技能。我的项目的迭代。所以,这是我将要跳过的第一个。所以,对于那些使用过Azure DevOps的人来说,您知道,我每年开始新的一年,我都必须为我的项目创建许多迭代。取决于您的迭代有多长,这可能需要五分钟。可能需要一个小时,取决于您有多少以及您在做什么。所以,现在我可以使用我的MCP服务器来为我完成这项工作。所以,这里我将进行演示。所以,这里我将继续说为我的特定项目创建工作项。我想让您创建这些新的迭代直到2026年,然后我想将它们添加到特定的团队。在这种情况下,我只做一个团队。所以,它将开始运行。它知道我正在使用该技能,因为这是斜杠命令。它正在获取我的迭代列表,为LM创建一系列任务,即创建迭代,先列出它们,创建它们,然后分配它们。所以,您可以看到最后一个是迭代51。您可以看到,通过查看现有的迭代,我们正在进行两周的迭代。然后下一件事是它将为我构建一个列表来创建新的迭代。所以,这里它说嘿,我有两周的迭代,周一到周五,从51开始。让我们继续创建下一个。所以,如果我看一下它将要进行的请求,您可以看到它基本上为我构建了一系列迭代,带有迭代名称。它遵循我之前相同的模式,迭代一,迭代二,等等。开始日期和结束日期,直到年底。然后我们将继续运行。它将创建这些迭代。然后,在这些迭代创建之后,它将查看响应,获取那些迭代ID,然后将它们分配给Ktoso团队。因为在Azure DevOps中,您必须先创建工作项或迭代,然后您必须将它们分配给不同的团队。所以,这里它将继续识别它需要的。对于某些原因,这需要几秒钟,所以我想我们还有20秒。这里,它将分配这些迭代,并将它们保存到我的项目和该团队。所以,这是您无需手动操作或创建脚本即可快速生成大量迭代的一种简单有效的方法。这是一个例子。另一个例子,我认为很有趣,只是为了设置这个场景,我将使用一个文档,在这种情况下,一个Markdown文档。我想让它阅读该文档。然后我想让它为我创建一个Epic,然后我想将该Epic分解成许多功能。所以,这就是想法。所以,这里我有一个Markdown文件,为我的特定项目创建一个Epic,然后将其分解成更小的子功能,然后也将其添加到我的团队。所以,这就是想法。所以,它将通过查看Markdown文件来创建Epic。这里您可以看到它。所以,它创建了它。您可以看到所有信息。现在,这里我实际上会发现它抛出了一个错误。因为我在定义它时犯了一个错误。我没有首先定义项目,以及正确的迭代或区域路径。所以,LLM正在尝试推断这一点,它所做的是它正在为我获取项目。将获取团队,确保它找到正确的区域路径,然后调整请求,相应地创建新的工作项。所以,这里它创建了一个新的Epic。这里它创建了,现在它将创建子工作项。它将创建六个。所以我只是想快进几秒钟。所以,它创建了所有六个。我认为是所有六个。然后它将它们链接起来。所以,它创建了Epic,创建了许多功能,然后,嗯,完成了所有这些,给我一个总结,然后显示了我刚刚创建的项目的摘要。所以,我将快速展示一下。所以,如果我回到我的看板,您可以看到这是我创建的工作项。您可以看到它有一个很好的范围。它有很好的成功标准。您可以看到它为我创建的所有子工作项,并将它们链接起来。再次,这几乎都是您期望在描述中填写的相同信息。现在,当然,您可以要求它设置优先级。您可以要求它设置工作量和一些其他字段,如果您愿意,您可以这样做。然后我将展示的最后一件事是另一个斜杠命令,用于总结该工作项。所以,如果我想总结该工作项,我基本上会这样做,嘿,Boards,给我这个特定的工作项并显示它。所以,它将获取工作项本身。它将获取评论。它将获取与该工作项相关的所有链接。然后给我一个很好的总结,这是我让您获取的Epic。这是其中的链接,我可以查看。这是它的摘要。然后这是它的评论。所以,这只是另一个关于您可以使用RMCP服务器做的不同事情的例子。就像我说的,这是一个本地MCP服务器的开始。我们正在开发一个远程服务器。一旦远程服务器出来,您就可以做更多有趣的事情,比如将其添加到创建铸造代理中,如果您有自己的自定义代理等。您可以使用它做更多的事情。所以,我认为就是这样,戴夫。回到你。>> 好的。谢谢丹。好了。所以,让我们谈谈您在GitHub本身上从GitHub Copilot获得的内容。所以我将进行一些演示,展示诸如自定义代理、Agentic代码审查和代理选项卡等内容,以及您知道,通过Agentic代码审查,要求Copilot对任何拉取请求进行更改。所以,能够引导Copilot,当我们进行这些操作时,展示代码扫描是如何自动完成编码代理所做的任何工作的,而且实际上,无论您是否拥有GitHub高级安全许可证,控制平面中的Copilot指标仪表板。所以,从企业角度来看,您可以控制谁可以访问Copilot,哪些模型可用,以及类似的内容。所以,让我先启动这个,然后。好了,完美。现在我将切换到我的演示环境。所以,是的,我在这里使用Azure Boards。我有很多,您知道,配置好的仪表板,就像我喜欢的那样,这样我们就可以看到我们的燃尽图和我们的活动工作项,并且我们可以深入了解Epic、功能和用户故事的层次结构等等。现在,如果我转到我的Boards,我们可以看到这里有一些正在进行的工作,我想看的是这个创建多选品种过滤器。实际上,首先,让我去展示一下我们在这里正在做什么。这是一个领养狗狗的网站。所以,您知道,您可以看到所有可用的狗狗。我们有金毛寻回犬、法国斗牛犬、德国牧羊犬、贵宾犬等,但现在,没有办法根据不同的品种进行过滤。所以,这就是我们在这里看到的这个用户故事,我们想创建一个多选品种过滤器下拉菜单。现在,这里有一个需要注意的地方,我在后台启动了另一个项目,您可以看到Copilot编码代理目前正在为我们的网站添加搜索引擎优化。但如果我深入到创建多选品种过滤器下拉菜单,现在,当涉及到Copilot和Copilot编码代理时,上下文是关键。所以,您想在定义您的用户故事和您的Bug以及其他事物时非常明确。您知道,您还可以通过Markdown文件向您的存储库添加自定义说明,这些说明可以提供很多信息,例如,“嘿,我们总是使用Playwright进行测试。嘿,这是我们首选的文本堆栈。这里有一些我们遵循的模式。”所有这些都可以编码到自定义说明中。但在这里,我们可以看到,我们就像丹一样,要求Copilot编码代理来处理这个。它说,在4:49,嘿,好的,我将创建一个草稿拉取请求并处理这个。大约九分钟后,它来了,说拉取请求已准备好审查。所以,到目前为止,我展示的是丹展示的内容,但我将深入一点。让我对我的窗口做一些调整,以便随时关注。所以,嗯,您知道,当我向下滚动时,是的,Copilot对它所做的事情提供了一个很好的描述。您可以看到它添加了新的测试等等。它自动利用MCP服务器进行Playwright。现在,它能够做到的是,它实际上可以提供截图,确切地显示它添加的内容。所以,这是可用的品种,新的下拉菜单。这是它实际下拉的时候。我们可以看到所有不同的品种等等。而且,如果您向下滚动,是的,这是我们用户故事的链接。但我们可以查看会话详细信息,了解Copilot在此过程中所做的一切。如果我向下滚动,其中一个优点是,我将向下滚动,我们可以看到,当然,我现在找不到它了。所以我这样做。在那里。CodeQL。现在,让我运行代码。嗯,错了。这不完全是我想要的地方。好了。它将对更改的文件运行CodeQL安全扫描。幸运的是,在这种情况下,它没有发现新的安全漏洞,但我想指出的是,即使您没有GitHub高级安全许可证,我们也会对C-pilot编码代理生成的代码运行代码和代码质量检查。现在,当您进行更改时,您就需要拥有GitHub高级安全许可证。好了。所以,如果我回到PR并查找评论。所以,我们可以看到,对于审阅者来说,Copilot实际上是审阅者之一。我们已经设置了,我们可以自动要求Copilot进行代码审查。我们可以看到它留下了一些评论。我将直接跳到其中一条评论。好了。所以,它正在查看添加的代码,谈论列表框,并说,“嘿,这可能会破坏列表框的屏幕阅读器语义和键盘交互。”现在,除非您真的将可访问性和屏幕阅读器放在心上进行代码审查,否则这可能很难发现和请求。但Copilot注意到了这一点,甚至还提出了如何修复它的建议。现在,如果我继续向下滚动,您会看到,作为我们检查的一部分,当然,代码扫描正在GitHub Actions上运行,并且代码质量检查在那里进行,但在此案例中,我仍然利用Azure管道进行CI/CD。所以,我们正试图使这种集成尽可能无缝。所以,我可以在GitHub中看到一个摘要。就像,如果我点击测试,那么我将进入那个漂亮的详细图形测试审查,我可以深入查看所有测试等等。我拥有漂亮的,您知道,图形化的测试结果表示。这对于我所有的管道都是一致的。这是GitHub Actions中尚未提供的内容。所以,您知道,也许您继续使用Azure管道的一个原因。当我转到摘要时,我可以看到提交,那里有拉取请求。所以,我可以回到拉取请求,嗯,所以它在来回的无缝集成。好了。现在我将转到另一个用户故事。那就是这个使用Azure管道实现多阶段部署。所以,是的,您可以使用GitHub Copilot来帮助您编写Azure管道YAML模板。所以,嗯,是的,您可以看到编码代理为我们完成了工作。现在,如果我深入到这个PR,我将直接转到会话详细信息,因为我想强调的关键点是,让我找到我的小搜索字符串。好了。在这里的代理会话中,它说,“嘿,我使用了Azure管道子代理。”所以,从这一点到代理结束或失败的所有内容都由Azure管道子代理完成。现在,它自动识别了这一点。但,您还可以做另一件事。所以,如果我向上看,把那个家伙移开。您可以看到我们在屏幕顶部添加了一些代理控件。所以我可以进去,我们可以看到这里的会话,但我可以进去,您知道,添加一个新任务或其他什么,我可以选择Azure管道自定义代理,或者我有一个GitHub Actions代理或一个搜索引擎优化代理。一个非常新的东西是所谓的Agent HQ。我们正在引入第三方代理。所以,除了Copilot之外,您还可以选择Claude Code或OpenAI Codex作为您的代理,如果您愿意的话。从模型中,您可以选择不同的模型。请注意,我们有自动。现在,自动将根据当前可用的模型选择模型。您知道,不是被过度使用或什么的。将来,我们将实现自动智能,这样它就会查看任务的上下文,并根据最适合任务的模型来选择模型。现在,如果我在这里转到Agents选项卡,这是GitHub存储库中的新功能,我可以看到,好的,这里是我的所有会话,但我可以查看这个存储库的所有会话。我们可以看到这些大部分都是我,Dave Ops 30,但也有丹的会话。我们为去年11月的Ignite演示使用了同一个存储库。所以,您可以看到所有存储库中的所有代理会话,而不仅仅是您自己的。所以,现在如果我回到那个特定的拉取请求,好了。现在我想看看我审查过的更改。好了。所以,您可以看到我在这里做了一些代码审查,但C-pilot也做了一些代码审查。所以,这里Copilot正在评论它的,您知道,代码审查的摘要等等,但这里是它进来并提出建议等等。您知道,说嘿,也许我们想改进资源组名称,因为我们正在部署到开发、QA和生产环境等等。谈论添加更好的错误处理。您知道,如果您不是一个非常高级的Azure管道开发人员,您可能还不知道错误处理的最佳实践。所以,让我们看看。哦,好了。所以,是的,我真的把GitHub当作我的纯粹程序员。所以,现在让我们谈谈那个自定义代理,对吧?我们在哪里定义这些自定义代理?现在您有几个选择。我将切换到我的另一个窗口,因为这里是。谁错了。让我看看,如果我刷新。它会。好了。这是我所在的组织,宠物工作坊就在这里。但如果我进入这个特殊的存储库,GitHub私有存储库,您会看到我们有这个agents文件夹。在agents文件夹中,我有Azure Pipelines MD。那是我的Azure管道代理。所以,您知道,我们通过一般指南,我们希望我们的事物如何构建,最佳实践,测试,安全,等等,甚至,您知道,谈论我们是否。

用于创建模板和事物。我在使用 Azure 管道方面拥有丰富的经验。但我并不是从头开始创建这个的。如果您去查看很棒的 Copilot 仓库,嗯,实际上,是的,我将直接从这里打开它。我以为我可能已经打开了,但是,所以如果您去查看很棒的 Copilot 仓库,这个东西每天都在增长。您可以找到代理、提示、指令的示例,现在还有很棒的技能,嗯,很棒的代理工作流,嗯,以及事物。具体来说,我直接从很棒的 Copilot 中提取了有关此 Azure 管道自定义代理的信息。所以,我只是把这段文字复制到了我组织中代理文件夹里的那个 markdown 文件里。糟糕。在我组织里。所以,让我们回去。好了。我设置它的地方是,如果我回到这里,哦,拜托。让我退出全屏模式。好了。如果我回到这里,我还在错误的仓库里,但我会很快回到 Devril Labs。并进入我的企业级别。所以在企业级别,我们添加了 AI 控件。在这里,我定义了,你知道,我想要代码审查代理吗?我想要编码代理吗?我是否允许 Anthropic、Claude 和 OpenAI 的 Codex?自定义代理。我的自定义代理在哪里定义?在这里,我说明了企业中的哪个组织拥有所有这些自定义代理的定义。它甚至为我提供了直接跳转到我审计日志的方法,专门用于 C-pilot 所做的一切。所以您对 copilot 编码代理将要做的所有事情都有完整的可追溯性。当我转到这里的 copilot 部分时,你知道,我可以查看诸如允许哪些模型之类的内容。模型列表每周都在增长。你知道,所以您可以来到这里说,所以这里有一个,这是一个相对较新的。是的。Anthropic Claude Opus 4.6。这个东西出来得足够晚,以至于还没有设置策略。它将始终保持“选择策略”,直到您作为管理员进来并说,“嘿,我们是否想让每个组织自己决定?我们是否想让它在所有地方启用,在所有地方禁用?”所以您拥有充足的控制权。要指出的另一件事是 MCP 服务器,您可以设置自己的 MCP 注册表,然后说,您是否想将 MCP 服务器限制在仅显示在您的 MCP 注册表中的那些,还是想允许所有,这意味着您自己的 MCP 注册表实际上只是一个建议列表?以及事物。所以再次,你知道,您对您想在您的企业和您的组织内允许的内容有很多控制。现在,说到使用,我们在企业级别拥有这些 copilot 仪表板。现在,我们在组织级别也有这些仪表板。您可以查看哪些模型使用最多,我们的每日使用量是多少,嗯,嗯,其他事情,比如是的,代码补全,有多少补全被接受,接受率是多少。好了。在这里,我们可以看到从 Claude Opus 4.5 到 Claude 嗯,是的,到 Claude Opus 4.6 以及所有内容都发生了一个转变。所以,大量信息触手可及。虽然这些仪表板本身不可配置,但 AI API 是可用的。所以,您可以获取这些数据甚至更多数据,并构建您自己的 PowerBI 仪表板以及类似的东西。好的。所以,还有一件事我想展示,注意时间,但我将回到这里。我这里有一个标签页。是这个吗?嗯,实际上我将直接去我感兴趣的那个拉取请求。嗯,嗯,啊,那是我们的新拉取请求。所以,这是在我们工作的时候刚刚创建的那个。但我想要去的是第九个。所以,很久以前我们在里面添加了一些 Python 工具,但它们有一些安全问题。所以,这里,这是使用 CodeQL 查看您拉取请求中的代码。您将在您的拉取请求中看到这些警告和错误。但是看,Copilot 自动修复正在为此建议一个修复。这只是一个单行修复。但是如果我们向下滚动,我们还有另一个。使用损坏或弱的加密算法。实际上是一个更复杂的修复,对吧?所以,它甚至可以帮助您进行那些非平凡的安全修复等等。我可以在这里直接将该建议提交为这个拉取请求的一部分,或者我可以为那个打开一个新的拉取请求,以及所有这些。所以,现在如果我转到安全选项卡,我还要快速指出几个其他事情,如果我进入我的 copilot 嗯,或者我的代码扫描警报,我想在这里指出一些事情。我知道有人提到哦,嘿,我们不扫描 Cobalt。我们仍然需要使用 Sonar 来完成。那么,猜猜怎么着?您可以在这里添加其他工具。所以,我可以进去,可用的有 Sonar Cloud 和 Sonar Cube。嗯,所以关键是您可以添加其他安全工具。所以,如果 GitHub 高级安全没有涵盖您需要由其他工具涵盖的事情,比如有 79 种不同的工具可以插入这里。如果我回去看我的安全选项卡,我想指出的另一件事是我有一个安全活动。所以,这是我将转到组织级别,因为在组织级别有一些更多的选项,但这是安全团队和开发人员将一起工作的地方。安全团队可以进去并设置,你知道,不同的过滤器和不同的活动来解决这里的安全问题。如果我进去看这个特定的问题,我可以分配它,我甚至可以分配给 Copilot 来修复。所以,再次,Copilot 可以帮助我们进行这些修复等等。我还有另一个活动,我们正在与嗯,糟糕。回到组织级别。抱歉。好了。我有一个演示 JROG 集成的。我想指出的是,是的,CodeQL 检测到了许多这些问题,但 JFrog 二进制秘密扫描器也检测到了许多这些问题。所以,如果您正在使用容器,您在某个时候会想扫描您正在使用的容器的基础镜像,以确保它们不包含硬编码的秘密或任何漏洞或类似的东西。所以,您正在利用 GitHub 本身独有的 GitHub 高级安全功能,将所有这些工具整合在一起,为您提供一个统一的视图。好的,我们时间不多了。所以,我想就这样,我将回到我的幻灯片。你知道,这里有几件事。您甚至可以在迁移仓库之前就开始。在 Azure 仓库中使用 GitHub Copilot,在 Visual Studio Code、Visual Studio 等内部。规划您的迁移。使用 GitHub Enterprise Importer,下一张幻灯片将提供一些很棒的链接。将代码迁移到 GitHub 并与 Azure Boards 和 Azure Pipelines 连接。所以,我们现在有了新的 GitHub 技能,其中一个特别是一个实验室,用于演示如何将仓库从 Azure DevOps 迁移到 GitHub。所以,您可以获得实践经验。现在,正如我们所说,我们将提供一个 PDF,以便您拥有所有这些资源。需要注意的关键是,如果您不知道,我们已经完成了许可工作,所以当您购买 GitHub Enterprise 时,我们现在包含 Azure DevOps 基本许可。如果您一直通过 Visual Studio 订阅获得许可,那么 GitHub Enterprise 已经包含了一段时间了。有关集成选项的完整文档。我想指出的是,请查看 Azure DevOps 的路线图。Azure DevOps 将继续存在,Dan 和他的团队一直在向路线图添加新项目。我提到过,像 Azure 测试计划这样的事情的路线图项目得到了某种程度的重新激发。你知道,Dan 和他的团队一直在努力更好地扩展与 GitHub 的集成等等。然后最后一次宣传,我发布了一个 GitHub 每月企业汇总。我查看了 GitHub 的博客、更改日志、白皮书、YouTube 视频,从企业角度将它们整合在一起,以便您可以从企业角度看到所有这些资源的新内容。好的。现在,我知道我们还有几分钟时间。这里有一些问题。我看到看起来 Azure DevOps 要消失了。不,不是这样的。Dan,您想评论一下,你知道,我们对 Azure DevOps 的未来有什么看法吗?嗯,是的,我已经回复了那个。嗯,是的,仓库不会消失。Azure DevOps 也不会消失。我认为您只是看到了一点不同的投资。您看到在 GitHub 仓库和 AI 以及 Agent AI 以及类似方面进行了大量投资。对于 Azure 仓库,这方面少一些。然后我们将在那里进行一些投资,但主要将是与 copilot 集成。所以,将来会有一些更有趣的事情我们可以谈论,但目前这就是大致的主题。太棒了。然后,是的,我看到了关于 Cobalt 的评论,不得不迁移到 Sonar。希望您能看到如何将工具,其他安全工具直接插入以获得 GitHub 的统一视图。是否会有 GitHub Copilot 用于 Azure 管道?您看到了如何创建自定义代理,并且在很棒的 Copilot 仓库中已经有示例了。嗯,是的,如果您搜索 GitHub awesome copilot,您会很容易找到那个仓库。嗯,嗯,还有其他问题在我演示时进来吗?我认为我把它们都给你了,Dave。太棒了。太棒了。嗯,我看看。哦。哦,我没有在这里连接。所以,啊,是的,当我们提供此演示文稿的 PDF 时,我们将提供所有资源。所以,是的,您将能够看到所有二维码、所有链接等等。就这样,Dan,有什么结束语吗?不,不,我认为我们准备好了。太棒了。非常感谢大家。我知道 Anna 在这里提到,请查看 aka.ms。Azure DevOps Live,了解未来即将举行的其他会议,祝大家有美好的一天。感谢所有人的加入,再次感谢我们的演讲者。本次会议是一个系列的一部分。要注册未来的节目并按需观看过去的剧集,您可以关注屏幕上或聊天中的链接。我们一直在寻求改进我们的会议和您的体验。如果您有任何反馈,我们很想听听您的意见。您可以在屏幕上或聊天中找到该链接。我们将在下一次会议上再见。嘿,嘿,嘿。