我正在尝试创建一个管道,我将在其中针对来自 Azure DevOps 管道的 Azure 订阅运行 terraform 配置。一切正常,但是当我尝试使用 az cli 以用户身份登录时失败:
[root@edoc2-7bdc69555-ftbzt ctdocs]# cat db_config.php
<?php
$dbhost = "10.100.16.11";
$dbuser = "demo-docs";
$dbpass = "DBPASSWORD";
$db = "demodocsdb";
?>
虽然从我本地的 cli 可以做到ERROR: Authentication failed due to error of 'Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.' This typically happens when attempting a Microsoft account, which requires interactive login. Please invoke 'az login' to cross check. More details are available at https://github.com/AzureAD/microsoft-authentication-library-for-python/wiki/Username-Password-Authentication
ERROR: Please run 'az login' to setup account.
命令是从脚本执行的,因为登录后我将转到需要这些凭据的 terraform 命令:
az log in -u user -p pass
我知道使用用户而不是服务主体不是最佳做法,但现在我必须坚持使用这种方法。那么有没有办法从 Azure DevOps 管道自动登录 az?
答案 0 :(得分:2)
az login -u $(secretUser) -p $(secretPassword)
将用户 ID 和密码放入 Azure Key Vault,命名为 secretUser
和 secretPassword
,然后使用 AzureKeyVault@1
任务填充它
- task: AzureKeyVault@1
inputs:
ConnectedServiceName: Your Service Connection Name
KeyVaultName: Your Key Vault Name
SecretsFilter: 'secretUser,secretPassword'
RunAsPreJob: true
- script: |
az login -u $(secretUser) -p $(secretPassword)
terraform init
terraform plan
答案 1 :(得分:2)
可以使用 Azure CLI 任务代替脚本任务
它的工作方式与普通脚本任务类似,您可以使用 scriptType
属性选择要运行的脚本语言:
脚本类型:PowerShell/PowerShell Core/Bat/Shell 脚本。选择 在 Linux 代理或 batch/ps/pscore 上运行时的 bash/pscore 脚本 在 Windows 代理上运行时的脚本。 PowerShell Core 脚本可以运行 在跨平台代理(Linux、macOS 或 Windows)上
它还在 azureSubscription
输入中接受服务连接引用。服务连接应该是 Azure Resource Manager 类型,可以通过 automatically 或使用 existing service principal 创建。
azure 连接详细信息安全地存储在服务连接中,当您的脚本开始执行 Azure CLI 时,已经使用服务连接登录了
以下是您的管道任务的外观示例
- task: AzureCLI@2
displayName: Azure CLI
inputs:
azureSubscription: <Name of the Azure Resource Manager service connection>
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
terraform init
terraform plan