0

我们正在寻找一种解决方案,如何将非机密变量从变量组移动到代码存储库中。 我们希望有以下可能性:

  • 跟踪代码库中所有设置的更改
  • 变量的版本值连同源代码、管道代码版本

问题:我们定义了 100 多个变量组,这些变量组被 100 多个 YAML 管道引用。它们在不同的管道/阶段/作业级别注入取决于它们正在运行的环境/组件/阶段。

示例问题:

  • 某些变量可以更改其名称,可以删除某些变量,并且在以 PROD 环境为目标的管道中它仍然被引用,而在 DEV 上部署的管道上它不存在
  • 特定管道运行在过去某个日期使用了变量的版本,很高兴知道它过去部署了哪些设置

可能的解决方案

  1. 应该可以使用简单的 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 文件(直接或间接)

YAML 模板限制

考虑到我们希望变量组在逻辑上粒度和分离并且不存储在一个大的 yml 文件中的要求(为了不达到工作代理中变量数量的另一个限制),我们不能这样做。

  1. 第二种方法是添加一个简单的脚本(PowerShell?),它将使用一些带有变量(variableName/variableValue)记录的键/值元数据文件,并使用命令执行作业步骤
##vso[task.setvariable variable=one]secondValue.

但它只能在初始作业级别完成,作为第一步,它看起来像 Azure DevOps 中原生提供的重新设计变量组机制。

当当前使用变量时,我们不确定这种方法是否适用于 YAML 管道中的任何地方。它们在某处作为参数传递给任务。等等。

  1. 将所有变量移入密钥保管库机密?我们在一开始就放弃了这个选项,因为密钥库是存储敏感数据的地方,而不是任何人都可以看到的设置。此外,将其存储在机密中会导致管道日志放置 * 而不是真实的配置设置,并混淆管道运行日志信息。

问题

Q1。对于如何在 Azure DevOps YAML 管道中实现变量版本控制/更改跟踪,您有任何其他建议/替代方案吗?

Q2。您在 2. 可能的解决方案中看到任何问题,或者有更好的想法吗?

4

1 回答 1

0

您可以将其视为替代方案:

  1. 将您的非机密变量存储在存储库中的 json 文件中
  2. 创建管道以将变量推送到App Configuration(而不是 Vault)
  3. 然后,如果您在应用中需要此设置,请确保您从应用中引用应用配置,而不是在 Azure Devops 中运行替换任务。或者,如果您直接通过管道需要此设置,请从应用程序配置中拉取它们

缺点:

  • 与您在 Powershell 案例中提到的相同。你需要做到工作水平

你得到什么:

  • 在回购中跟踪
  • 跟踪应用程序配置和应用程序配置的所有好处
于 2021-05-26T02:34:23.243 回答