我们正在寻找一种解决方案,如何将非机密变量从变量组移动到代码存储库中。 我们希望有以下可能性:
- 跟踪代码库中所有设置的更改
- 变量的版本值连同源代码、管道代码版本
问题:我们定义了 100 多个变量组,这些变量组被 100 多个 YAML 管道引用。它们在不同的管道/阶段/作业级别注入取决于它们正在运行的环境/组件/阶段。
示例问题:
- 某些变量可以更改其名称,可以删除某些变量,并且在以 PROD 环境为目标的管道中它仍然被引用,而在 DEV 上部署的管道上它不存在
- 特定管道运行在过去某个日期使用了变量的版本,很高兴知道它过去部署了哪些设置
可能的解决方案:
- 应该可以使用简单的 yaml 模板变量文件来模拟变量组,并使用以下方法将带有变量组的 yaml 模板包含到主 yaml 中:变量重用。
# File: variable-group-component.yml
variables:
myComponentVariable: 'SomeVal'
# File: variable-group-environment.yml
variables:
myEnvVariable: 'DEV'
# File: azure-pipelines.yml
variables:
- template: variable-group-component.yml # Template reference
- template: variable-group-environment.yml # Template reference
#some stages/jobs/steps:
理论上,将变量组转换为 YAML 模板文件并从 YAML 引用它们而不是使用对变量组的引用应该很容易。
# Current reference we use
variables:
- group: "Current classical variable group"
然而,即使没有实施这种方法,我们在管道中也遇到了以下限制:“最多可以包含 100 个单独的 YAML 文件(直接或间接) ”
考虑到我们希望变量组在逻辑上粒度和分离并且不存储在一个大的 yml 文件中的要求(为了不达到工作代理中变量数量的另一个限制),我们不能这样做。
- 第二种方法是添加一个简单的脚本(PowerShell?),它将使用一些带有变量(variableName/variableValue)记录的键/值元数据文件,并使用命令执行作业步骤
##vso[task.setvariable variable=one]secondValue.
但它只能在初始作业级别完成,作为第一步,它看起来像 Azure DevOps 中原生提供的重新设计变量组机制。
当当前使用变量时,我们不确定这种方法是否适用于 YAML 管道中的任何地方。它们在某处作为参数传递给任务。等等。
- 将所有变量移入密钥保管库机密?我们在一开始就放弃了这个选项,因为密钥库是存储敏感数据的地方,而不是任何人都可以看到的设置。此外,将其存储在机密中会导致管道日志放置 * 而不是真实的配置设置,并混淆管道运行日志信息。
问题:
Q1。对于如何在 Azure DevOps YAML 管道中实现变量版本控制/更改跟踪,您有任何其他建议/替代方案吗?
Q2。您在 2. 可能的解决方案中看到任何问题,或者有更好的想法吗?