使用 Azure blob 存储作为后端时用于 Pulumi 的 Azure DevOps 管道

Azure DevOps pipeline for Pulumi when using Azure blob storage as backend

我没有使用 Pulumi 服务(托管)后端,而是使用 Azure blob 容器作为堆栈状态后端。根据文档,Pulumi CLI 需要管道代理中的 AZURE_STORAGE_KEY(或 AZURE_STORAGE_SAS_TOKEN)环境变量。

当帐户密钥作为管道变量提供时,它可以正常工作。 但是当帐户密钥作为秘密存储在 KeyVault 中时,它不起作用。

我做了什么:

Account key in KayVault as secret
→ (pipeline variable group) Link secrets from an Azure key vault as variables
→ → (Pipeline variables) Link variable group
→ → → Make account key available to Pulumi CLI (in pipeline agent) as environment variable

问题:

所以,问题很明显:环境变量名称不匹配 → Pulumi CLI 没有得到它期望的结果(AZURE_STORAGE_KEY)。

仅供参考,

如何解决这个问题?
有没有更好的方法? (在管道代理中安全地向 Pulumi CLI 提供帐户密钥)。
如果使用 YAML (azure-pipelines.yml),有什么办法可以实现这个目标吗?如何? (任何解决方法或提示也会有所帮助)

您需要使用不同的 powershell 任务设置变量:

echo ##vso[task.setvariable variable=AZURE_STORAGE_KEY;]$(AZURE-STORAGE-KEY)

我解决了问题:

  • 如我的问题所述,KeyVault 机密链接到变量组
  • 变量组链接到管道变量(因此现在 KeyVault 机密可用作管道变量)
  • 根据 Microsoft 文档,secret 类型变量不会自动注入到任务中
  • 使用env 任务通过插入管道变量来注入环境变量(Pulumi CLI 期望的)

azure-pipelines.yml

pool:
  vmImage: 'ubuntu-latest'

variables:
- group: "pulumi-demo-vg"

job: PulumiUpJob
displayName: Pulumi Up Stack Deployment Job
steps:
- task: Pulumi@1
  inputs:
    azureSubscription: 'pulumi-demo-sc' # sc -> Service Connection
    command: 'up'
    loginArgs: 'azblob://pulumi-backend-container'
    args: '--yes'
    stack: 'dev'
  env:
    AZURE_STORAGE_ACCOUNT: "xxxsa"
    AZURE_STORAGE_KEY: $(AZURE-STORAGE-KEY)
    AZURE_CLIENT_ID: $(AZURE-CLIENT-ID)
    AZURE_CLIENT_SECRET: $(AZURE-CLIENT-SECRET)
    AZURE_TENANT_ID: $(AZURE-TENANT-ID)