Azure DevOps管道作业运行什么服务原理?

时间:2020-05-21 07:24:45

标签: azure azure-devops azure-keyvault

我有一个具有集成测试任务的Azure DevOps管道。任务运行时,测试需要访问特定的Azure KeyVault。我需要给出在DevOps中运行作业的原理,以便访问KeyVault。但是,我有点困惑工作的运行原理。

我尝试了以下方法,但是没有任何区别:

在Azure DevOps网站中,我转到:项目设置->服务连接->管理服务原理。然后,这会在Azure门户中为该原理加载一个页面。我采用了这一原则,并授予他们在KeyVaut服务中的读取权限,但是测试仍然失败,并显示相同的错误。

是否还有另一项实际上正在执行任务的原则(即我在错误的位置看),或者还有其他我没想到的东西?

作为参考,这是我得到的错误(出于安全原因,我替换了GUID):

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException : Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. Received a non-retryable error. MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. Please run 'az login' to setup account.

1 个答案:

答案 0 :(得分:1)

如果服务连接未与任务中的管道关联,则测试代码无法访问您创建的服务连接。

1,作为解决方法,您可以尝试使用Azure Cli task中的命令执行测试。如下所示:将azureSubscription设置为您创建的服务连接。 Azure Cli任务将使用服务连接中的身份验证连接到您的Azure订阅。该测试将在当前的Azure cli环境中运行。有关更多信息,请参见Authenticating with Azure CLI

- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: <Name of the Azure service connection>
    scriptLocation: inlineScript
    inlineScript: |
      dotnet test 
      

2,您也可以Use a shared secret credential to sign into Azure AD。请参考以下步骤:

提供connectionStringAzureServiceTokenProvider的构造函数,如下所示:

var azureServiceTokenProvider = new AzureServiceTokenProvider("connectionString=#{keyVaultEndpoint}#;RunAs=App;AppId=#{appId}#;TenantId=#{tenantId}#;AppKey=#{clientSecret}#")

在管道中定义keyVaultEndpointappIdtenantIdclientSecret变量。

添加replace token task,将connectionString中{AppId},{TenantId}和{ClientSecret}下面的变量替换为管道中的值。

enter image description here

3,您还可以尝试在本地计算机上创建self-hosted agent。并针对自己托管的代理运行您的管道。由于测试可以在本地正常运行,因此在本地计算机上的自托管代理上也可以正常运行。

希望上面有帮助!