我可以通过 CLI 验证 azure-pipelines.yml 文件吗?

Posted

技术标签:

【中文标题】我可以通过 CLI 验证 azure-pipelines.yml 文件吗?【英文标题】:Can I validate an azure-pipelines.yml file via CLI? 【发布时间】:2019-05-13 22:01:09 【问题描述】:

我正在尝试为 monorepo 构建一个 azure-pipelines.yml,并且我正在努力弄清楚如何在我前进的过程中调试该文件。

是否有诸如az deployment validate ./azure-pipelines.yml 之类的命令可用?

如果是这样,你建议我怎么做?我不断进行更改,将它们推送到我的存储库,然后让 Azure DevOps 运行它,但失败了。

【问题讨论】:

【参考方案1】:

选项 1

现在有一个 Visual Studio Code 扩展,它提供了在将管道 YAML 代码提交到您的存储库之前对其进行验证的能力。

扩展名为Azure Pipelines YAML Validator。作者明确表示它使用在线服务进行验证,即您的管道将被上传以供检查。所以你必须相信作者,你的数据是被小心处理的,你应该确保没有像秘密这样的敏感数据存储在你的管道代码中(无论如何这是一个坏习惯)。

选项 2

pull request:Test-VSTeamYamlPipeline 还引入了一个新的 PowerShell cmdlet。要使用该 cmdlet 进行验证,您需要安装 PowerShell 模块 VSTeam(需要 PowerShell 5.0+ 或 PS Core):

Install-Module -Name VSTeam -Scope CurrentUser

接下来您需要指定您的 Azure DevOps 项目:

Set-VSTeamAccount -Account <Name of your Azure DevOps org> -PersonalAccessToken <Your PAT with access to your project>

(还有连接到自托管 Azure DevOps 服务器的选项 - 请参阅 docs。)您的 PAT 必须至少具有“构建:读取和执行”权限。

然后,您可以根据已设置的管道验证在本地进行的更改。这意味着您之前必须已经基于提交的 YAML 文件创建了一个管道。对于验证,您将需要 项目名称管道 ID。要获取这些信息,请在 Azure DevOps 中打开管道并从 URL 中提取信息:

https://dev.azure.com/<DEVOPS_ORG>/<PROJECT_NAME/_build?definitionId=<PIPELINE_ID>

验证请求如下所示

Test-VSTeamYamlPipeline -Project <PROJECT_NAME> -PipelineId <PIPELINE_ID> -FilePath '<PATH_TO_YAML_FILE>'

如果你有语法错误,那么你会得到一个指示错误的输出:

Test-VSTeamYamlPipeline: /your-pipeline.yml (Line: 12, Col: 13): Unexpected value ''

如果一切正常,输出有点神秘,对我来说看起来像这样:

Name url                                                                                                      state   Id
---- ---                                                                                                      -----   --
     https://dev.azure.com/<DEVOPS_ORG>/<SOME_GUID>/_apis/pipelines/<PIPELINE_ID>/runs/-1 unknown -1

【讨论】:

【参考方案2】:

不,没有办法验证它。当您尝试运行它时 - 它会向您显示错误,这是验证它的唯一真正方法。

这个 VSCode 扩展提供语法高亮和自动补全。

https://marketplace.visualstudio.com/items?itemName=ms-azure-devops.azure-pipelines

【讨论】:

我添加了这个扩展,它适用于我的*** .yml 文件。但是,我使用的是单一存储库并且有多个 .yml 文件。但是,总的来说,我很欣赏这个扩展。谢谢! 好的,这并没有真正改变什么?还是该扩展名只能使用默认文件名?我还没用过 它抱怨我的子管道文件中缺少部分。我有一个主管道调用子存储库的模板,然后这些子存储库调用 build.yml 文件。对于 subrepo 模板,它抱怨缺少东西,不知道它是从父 yml 文件中调用的。 我正在做这样的事情:github.com/jayway/monorepo-azure-pipeline(我的 repo 归我公司所有,所以我无法发布) 问题跟踪此请求:github.com/Microsoft/azure-pipelines-yaml/issues/34

以上是关于我可以通过 CLI 验证 azure-pipelines.yml 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

heroku CLI 通过令牌进行身份验证

通过 CLI 针对 Java 证书存储验证证书

Heroku CLI 身份验证问题

更改密码后 Heroku CLI 中的身份验证失败

如何在 GitHub Action 中使用 GitHub cli (gh) 向 Github 进行身份验证并创建 PR?

尝试通过 CLI 发布 SharePoint Webpart