如何在 azure devops 中解析 yaml 文件
Posted
技术标签:
【中文标题】如何在 azure devops 中解析 yaml 文件【英文标题】:How to possible parse yaml file in azure devops 【发布时间】:2021-12-31 03:40:09 【问题描述】:如何解析 yaml 文件以从中提取 appVersion ?
我可以将文件内容与文件内容一起读取到变量中以获取所有内容 但我无法解析 yaml 文件以从中提取 appVersion。
powershell 脚本:
# get chart.yaml file content to yamlfilecontent variable.
write-host($env:yamlfilecontent)
# how to parse content ?
write-host($env:yamlfilecontent["appVersion"])
chart.yaml
apiVersion: v2
name: asset-api
description: Helm Chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.5.2
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.0.2"
【问题讨论】:
顺便说一句:Write-Host
is typically the wrong tool to use,除非意图是仅写入显示器,绕过成功输出流,并能够将输出发送到其他命令,将其捕获在变量中,将其重定向到文件。要输出一个值,请单独使用它;例如,$value
而不是 Write-Host $value
(或使用 Write-Output $value
,尽管这很少需要)。另见:***.com/a/50416448/45375的底部
顺便说一句:必须调用 PowerShell 函数、cmdlet、脚本和外部程序像 shell 命令 - foo arg1 arg2
- 不像 C#方法 - foo('arg1', 'arg2')
。如果您使用,
分隔参数,您将构造一个命令将其视为单个参数 的数组。为防止意外使用方法语法,请使用Set-StrictMode -Version 2
或更高版本,但请注意其其他影响。请参阅this answer 了解更多信息。
【参考方案1】:
不幸的是,从 7.2 版开始,PowerShell没有内置支持解析 YAML - 请参阅 GitHub issue #3607 中的相关功能请求。
但是,第三方模块是可用的,例如 powershell-yaml
,可从 PowerShell 库here 获得,您可以从中直接将其部署到 Azure 自动化。要在本地安装,请使用Install-Module -Name powershell-yaml
。
假设模块已安装,以下是如何解析您问题中的 YAML,使用 here-string 定义输入文本:
$yamlText = @'
apiVersion: v2
name: asset-api
description: Helm Chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
# ...
version: 1.5.2
# This is the version number of the application being deployed. This version number should be
# ...
appVersion: "1.0.2"
'@
($yamlText | ConvertFrom-Yaml).appVersion
如预期的那样,以上产生1.0.2
。
ConvertFrom-Yaml
输出一个有序哈希表,它代表 YAML 输入(从技术上讲,是 [System.Collections.Specialized.OrderedDictionary]
类型的实例),其条目 PowerShell 允许您像访问它们是属性(例如.appVersion
)或使用index 语法(例如['appVersion']
)。
【讨论】:
以上是关于如何在 azure devops 中解析 yaml 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 yaml 中处理 Azure DevOps 管道中的错误?
如何从 azure devops 上的图表 yaml 文件中获取 appVersion?
如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段
合并 PR 后如何限制 Azure DevOps YAML 管道中的关联工作项?