是否有工具可以在本地验证Azure DevOps管道?

Tom*_*han 15 static-analysis azure-devops

对YAML定义的Azure DevOps管道进行更改时,将更改推送到分支只是为了看到生成失败并出现解析错误(有效的YAML,但管道定义无效),然后尝试反复尝试,可能会很繁琐。解决问题。

如果可以通过本地分析和验证管道定义来缩短反馈回路,那将是一个很好的选择。从根本上讲,这是一个具有关于Azure管道中可以定义的各种资源等知识的短毛绒玩具。但是,我还没有找到能做到这一点的工具。

那里有这样的工具吗?

小智 21

仅供参考 - 此功能已在问题 #2479 中删除-删除对“本地运行”功能的引用

考虑到 Github Actions能够在本地运行操作,希望他们以后能把它带回来


Sys*_*nin 12

使用 YAML 描述的管道,如果您有一个包含如何组成 YAML 文件的规则的架构,则可以验证 YAML。它将作为您描述的情况的简短反馈,特别是对于语法解析错误。YAML 架构验证可能适用于几乎所有 IDE。所以,我们需要:

  1. YAML 架构 - 根据我们将验证我们的管道
  2. 一个 IDE(VS Code 作为一个流行的例子)——它将动态执行验证
  3. 配置上述两项以共同努力以实现更大的利益

该架构可能可以从很多地方找到,对于这种情况,我建议使用https://www.schemastore.org/json/ 它具有Azure Pipelines 架构(该架构包含一些问题,例如与 Microsoft 相比的不同类型的值)文档,但仍然涵盖无效语法的情况)

VS Code 需要额外的插件来执行 YAML 文本验证,还有很多可以验证架构的插件。我建议尝试RedHat 的 YAML(我知道,该插件的评级不是最好的,但它适用于验证并且也是可配置的)

在该 VS Code 插件的设置中,您将看到有关验证的部分(如屏幕截图所示)

YAML 架构验证插件设置

现在,您可以添加到所需架构的设置,甚至无需将其下载到您的计算机上:

    "yaml.schemas": {
    
    "https://raw.githubusercontent.com/microsoft/azure-pipelines-vscode/v1.174.2/service-schema.json" : "/*"
}
Run Code Online (Sandbox Code Playgroud)

只需保存设置并重新启动 VS Code。您将注意到有关 YAML Azure DevOps Pipeline 文件中问题的警告(如果有)。下面的屏幕截图中的目的验证失败:

在此输入图像描述

还可以在此处查看更多详细信息和示例


Jam*_*mie 9

您可以使用其YAML测试功能在本地运行Azure DevOps代理。

使用Visual Studio Team Services代理在本地计算机上安装代理,并使用该代理中可用的代理本地YAML测试功能。

这应该使您非常接近所期望的反馈类型。

希望这可以帮助。

  • 谢谢!这对我来说有点矫枉过正(因为它似乎需要在本地安装代理;我没有设法仅通过存储库中的东西来使其工作......)。然而,这个咒语,我能不能让它发挥作用,它似乎完全符合我的要求:`./run.sh --yaml <my-yaml-file> --what-if`。我会向他们提出问题,看看他们是否可以开始将该功能作为全局 dotnet 工具或其他工具发布。 (2认同)
  • 这已经是GA了吗?[链接页面](https://github.com/Microsoft/azure-pipelines-agent/blob/d504d4ef0e82d34439aa0eb494f218c2d9146a95/docs/preview/yamlgettingstarted-runlocal.md)表明它只是内部的。 (2认同)
  • [最新版本](https://github.com/microsoft/azure-pipelines-agent/blob/fe5a24a1d7e93724c4849295a8200804cf2ec301/docs/preview/outdated/yamlgettingstarted-localrun.md)已被注释掉 - [原始文档](https ://raw.githubusercontent.com/microsoft/azure-pipelines-agent/fe5a24a1d7e93724c4849295a8200804cf2ec301/docs/preview/outdated/yamlgettingstarted-localrun.md)表明它在更改时仍在不断变化(2018-06-24) ) (2认同)

Dej*_*489 5

Azure DevOps 提供了一个运行预览 api 端点,它采用 yaml 覆盖并返回扩展的 yaml。我将此支持添加到AzurePipelinePS powershell 模块。下面的命令将执行 id 为 01 的管道,但使用我的 yaml 覆盖并返回扩展的 yaml 管道。

预览 - 预览服务:管道 API 版本:6.1-preview.1 将管道的试运行排队并返回包含最终 yaml 的对象。

# AzurePipelinesPS session
$session = 'myAPSessionName'

# Path to my local yaml
$path = ".\extension.yml"    

# The id of an existing pipeline in my project
$id = 01        
        
# The master branch of my repository
$resources = @{              
   repositories = @{
       self = @{
           refName = 'refs/heads/master'
        }
   }
}

Test-APPipelineYaml -Session $session -FullName $path -PipelineId $id -Resources 
$resources
Run Code Online (Sandbox Code Playgroud)


Cas*_*sen 5

我可以告诉你我们如何处理这种脱节。

我们仅使用管道即代码 yaml。

我们使用零 yaml 模板并严格执行 one-file-pr-pipeline。

我们使用 vscode 的 azure yaml 扩展,在编辑器中获得类似 linter 的行为。

我们在管道中执行的大多数实际操作都是通过调用 PowerShell 来完成的,通过合理的默认设置也可以在 CLI 中调用,这意味着我们本质上可以在本地执行任何相关操作。

代理的配置和实际的仅管道内容除外,例如下载工件任务和发布任务等。

让我举一些例子:

这里我们有构建前端组件的步骤: 在此输入图像描述

我们在 CLI 中运行该步骤:

在此输入图像描述

我不会发布实际管道运行的屏幕截图,因为清理它需要很长时间,但它基本上是相同的,加上 run.ps1 调用包装器提供的一些更多跟踪信息。