Azure Devops YAML - AzureKeyVault 任务不接受变量作为 keyvaultname

标签 azure azure-devops yaml azure-keyvault

我在执行 AzureKeyVault 任务时做错了什么?查看任务运行时的日志,似乎使用变量作为字符串而不是变量的值?然后该任务似乎什么也没做,直到连接 ECONNREFUSED 127.0.0.1:443 超时。

在任务1中我设置这个变量。我在此之后创建了一个任务,我可以在其中写入托管变量值,如下所示:“$($env:KVNAME)”。

但是在我的 azurekeyvault 任务中,我使用该变量作为 KeyVaultName:就像我在任务 2 中一样,但随后遇到了这个问题;该任务将变量视为字符串,我通过任务创建的日志知道这一点:“key Vault name: $($env:KVNAME)”

最初我认为 ##vso... 变量设置无法正常工作,这就是为什么我创建了 task2 来确保它正常工作。

这是我的 YAML:

jobs:
  - deployment: mydeployment
    displayName: "testingstuff"
    pool:
      vmImage: "windows-2022"
    workspace:
      clean: all
    environment: testing
    strategy:
      runOnce:
        deploy:
          steps:
            - task: AzurePowerShell@5
              displayName: "write global variable"
              enabled: true
              inputs:
                azureSubscription: "sm_Pay-As-You-Go"
                ScriptType: InlineScript
                Inline: |
                  $kv = "mykeyvaultname"
                  Write-Host "##vso[task.setvariable variable=KVNAME;]$kv"
                azurePowerShellVersion: LatestVersion

            - task: AzurePowerShell@5
              displayName: "print variable value"
              enabled: true
              inputs:
                azureSubscription: "sm_Pay-As-You-Go"
                ScriptType: InlineScript
                Inline: |
                  Write-Host "variable: $($env:KVNAME)" #this displays the variable value completely fine in the pipeline logs
                azurePowerShellVersion: LatestVersion

            - task: AzureKeyVault@2
              displayName: "Fetch keyvault secrets"
              enabled: true
              inputs:
                azureSubscription: "sm_Pay-As-You-Go"
                KeyVaultName: $($env:KVNAME) #pipeline logs suggest that the task is treating this variable like a string, logs: "key vault name: $($env:KVNAME)"
                SecretsFilter: SqlConnectionString, StorageConnectionString
                RunAsPreJob: false

最佳答案

您尝试使用的格式:

KeyVaultName: $($env:KVNAME)

用于访问variables within a powershell script .

但在 AzureKeyVault 任务的参数中,这是管道 yaml,您需要遵循 pipeline expressions 的格式。 :

KeyVaultName: $(KVNAME)

请注意,这是运行时语法,这意味着在任务运行之前不会对其进行求值;这意味着您在之前的任务中设置的变量可用。还有编译时语法,即 ${{ Variables.KVNAME }} ,它将在编译管道时进行评估;但这对你来说没有用,因为当时该变量不存在。

关于Azure Devops YAML - AzureKeyVault 任务不接受变量作为 keyvaultname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71194577/

相关文章:

kubernetes - yq - 将 yaml 添加到 yaml 的问题

azure - Multi-Tenancy Azure 服务总线

sql-server - 使用 Azure DevOps 部署数据库期间出现错误 "The DELETE statement conflicted with the REFERENCE constraint"

azure - 删除 ADFS 信任关系后恢复 Azure Active Directory

azure - 神秘? Azure DaaS 网络作业

git - 根据对子文件夹的更改触发 Azure DevOps 构建

Docker-Compose YAML : how to populate single-line array from environment variable?

go - 将 GO YAML 解码为 Map 或 String

azure - 我们可以通过 Azure 数据工厂自托管 IR 连接没有 Internet 连接的源系统吗?

node.js - 使用 Azure SDK for Node.js 中的 BlobService.getBlobURL() 生成 Azure 共享访问签名