【问题标题】:TFS\Team Services, Using Azure KeyVault secrets from a Variable Group in a Build DefinitionTFS\Team Services,在构建定义中使用来自变量组的 Azure KeyVault 机密
【发布时间】:2018-02-09 13:12:41
【问题描述】:

我在 Team Services 中有一个简单的构建设置。该构建只需从 Team Services 托管的 Git 存储库下载源代码,然后执行 Powershell 脚本。

Powershell Script 接收 4 个参数;

-SiteName "$(AppServiceName)" -AzureRMTenantID "$(AzureRMTenantID)" -AzureRMUN "$(AzureRMUN)" -AzureRMPW "$(AzureRMPW)"

AppServiceName 在构建排队时手动输入。

3 个 AzureRM* 参数应该来自我已链接到构建定义的变量组;

变量组 AzureDevOps 配置为将 Azure Key Vault 中的机密链接为变量;

根据我能找到的有关此模式的所有信息,它似乎应该可以工作。

作为临时健全性检查,我在我的 powershell 脚本中打印出变量,以便确认它们被正确传递。

到目前为止,我无法正确打印任何 AzureRM* 变量的值,这让我相信它们没有按预期传递。

Generating script.
Formatted command: . 'd:\a\1\s\AppServices\Create Canned App Service Application.ps1' -SiteName "Testers" -AzureRMTenantID "" -AzureRMUN "" -AzureRMPW ""
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -File "d:\a\_temp\23b9a27a-4b6d-4232-8e24-150173e08915.ps1"
Working Set of Variables:
SiteName:  Testers
ResourceGroup: Applications
ASE Name: appservices-ase
Location: East US
Additional Variables:
AzureRMTenantID: 

我不希望变量会打印在此处的日志命令中;

Formatted command: . 'd:\a\1\s\AppServices\Create Canned App Service Application.ps1' -SiteName "Testers" -AzureRMTenantID "" -AzureRMUN "" -AzureRMPW ""

但我希望它们会打印在我明确写出的脚本中;

Write-Host "Working Set of Variables:`nSiteName: "$SiteName"`r`nResourceGroup: "$RG"`r`nASE Name: "$ASEName"`r`nLocation: "$Location
Write-Host "Additional Variables:`nAzureRMTenantID: "$AzureRMTenantID"`r`n"$AzureRMUN"`r`n"$AzureRMPW

如果我在本地运行 PS 脚本,值会按预期打印;

PS C:\ashley\scm\AzureAutomation\AppServices> & '.\Create Canned App Service Application.ps1' -SiteName "tester" -AzureRMTenantID 12345 -AzureRMUN user -AzureRMPW 1234
Working Set of Variables:
SiteName:  tester
ResourceGroup: Applications
ASE Name: appservices-ase
Location: East US
Additional Variables:
AzureRMTenantID:  12345
user
1234

有谁知道如何进行这项工作?我想知道问题是否与 KeyVault 权限有关,因为请求来自 Team Services 中内置的“Hosted 2017”代理队列。

【问题讨论】:

    标签: azure tfs azure-devops azure-pipelines-build-task azure-pipelines-release-pipeline


    【解决方案1】:

    首先,您不能打印出秘密变量的值,您可以将数据发送到服务(例如 Web API)以在构建/发布期间获取实际数据。

    其次,Key Vault 机密变量用于发布,它会在发布期间添加 Azure Key Vault 任务。 Link secrets from an Azure Key vault as variables

    如果您在构建中使用,您将获得空值。您可以将Key Vault Task 添加到构建定义中,然后您可以在以下任务中使用相关变量。 (不需要在构建定义中链接到那个变量组)

    【讨论】:

    • 感谢 starain-MSFT,我将尝试将其构建为今天的版本,看看是否有帮助。未来是否有计划在构建定义中支持这一点?
    • @Sage 官方没有文章提及,但是可以提交用户声音here。另一方面,我的回复/回答是否解决了您原来的问题?
    • @starianchen-MSFT 这应该记录在 VSTS 站点中,请确保文档已更新。
    • @starianchen-MSFT 实际上只是检查文档,它说它也应该与构建一起使用? docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/…
    • 嗨@starianchen-MSFT 正在研究相同的概念,我可以从 KeyVault 获取机密。但是,我正在以 *** 格式获取它们。因此,我无法将它们用于进一步的任务。它有什么问题
    【解决方案2】:

    Key Vault 支持目前仅适用于版本定义。您可以创建发布定义并将您的 Git 存储库链接为工件,并且可以实现相同的目的。

    我在将 Azure Keyvault VG 链接到 BD 时收到此错误。

    【讨论】:

    • 有趣,在我的所有闲逛中,我没有遇到任何类似的错误。如果我,我可能不会最终发布这个问题。这个错误是显示在门户网站还是其他地方?
    • @Sage 我认为我们最近开始显示错误,而这些更改可能直到现在还没有到达您的帐户。您可以按照 starain-MSFT 的指示添加 KeyVault 任务
    • 嗨@Harshil,链接到构建定义时仍然没有错误消息。不过不用担心,我理解 KeyVault 支持的变量组在构建定义中不起作用的观点。这是我们能够在我们的环境中解决的问题。我希望重用 Jenkins 的 PS 脚本来在发布管理中执行相同的工作。最后,我选择将 AzureRMLogin 进程(需要这些变量)注释掉,使用 Azure Task 上内置的 Powershell 来完成工作。
    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多