问题描述
我们正在寻找如何将非秘密变量从变量组移动到代码存储库中的解决方案。 我们希望有这样的可能性:
- 跟踪代码存储库中所有设置的更改
- 变量的版本值连同源代码、管道代码版本
问题: 我们定义了 100 多个变量组,这些变量组被 100 多个 YAML 管道引用。 它们在不同的管道/阶段/作业级别注入取决于它们运行的环境/组件/阶段。
示例问题:
- 某些变量可以更改其名称,某些变量可以删除,并且在面向 PROD 环境的管道中仍被引用,而在部署在 DEV 上的管道中则不存在
- 特定管道运行使用了过去某个日期的变量版本,很高兴知道它过去部署了哪些设置
可能的解决方案:
- 应该可以使用简单的 yaml 模板变量文件来模拟变量组,并使用以下方法将带有变量组的 yaml 模板包含到主 yaml 中:Variable reuse。
# 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 管道中的任何地方。在某处,它们作为参数传递给任务。等
- 将所有变量移到 Key Vault Secret 中?我们一开始就放弃了这个选项,因为密钥保管库是存储敏感数据的地方,而不是任何人都可以看到的设置。此外,将其存储在秘密中会导致管道日志使用 * 而不是真实的配置设置并混淆管道运行日志信息。
问题:
第一季度。关于如何在 Azure DevOps YAML 管道中实现变量版本控制/更改跟踪,您还有其他建议/替代方案吗?
第 2 季度。 2. 可能的解决方案中是否有任何问题,或者有更好的想法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)