- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用VSTS(现在称为Azure DevOps)来执行CI / CD管道。对于我的构建管道,我有一个非常基本的设置,涉及执行还原,构建,测试和发布步骤。
对于我的测试步骤,我将其设置为运行两个测试项目-一个单元测试项目和一个集成测试项目。我具有“密钥保管库”访问策略设置,以提供对本人和Azure Devops的访问。当我使用Visual Studio在本地运行测试时,由于我登录到有权访问Azure密钥保险库的同一帐户,因此我可以运行测试而不会出现任何错误。
我的应用程序配置为使用以下设置访问密钥库:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
)
.UseStartup<Startup>();
2018-10-16T00:37:04.6202055Z Test run for D:\a\1\s\SGIntegrationTests\bin\Release\netcoreapp2.1\SGIntegrationTests.dll(.NETCoreApp,Version=v2.1)
2018-10-16T00:37:05.3640674Z Microsoft (R) Test Execution Command Line Tool Version 15.8.0
2018-10-16T00:37:05.3641588Z Copyright (c) Microsoft Corporation. All rights reserved.
2018-10-16T00:37:05.3641723Z
2018-10-16T00:37:06.8873531Z Starting test execution, please wait...
2018-10-16T00:37:51.9955035Z [xUnit.net 00:00:40.80] SGIntegrationTests.HomeControllerShould.IndexContentTypeIsTextHtml [FAIL]
2018-10-16T00:37:52.0883568Z Failed SGIntegrationTests.HomeControllerShould.IndexContentTypeIsTextHtml
2018-10-16T00:37:52.0884088Z Error Message:
2018-10-16T00:37:52.0884378Z Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException : Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
2018-10-16T00:37:52.0884737Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
2018-10-16T00:37:52.0884899Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Visual Studio Token provider file not found at "C:\Users\VssAdministrator\AppData\Local\.IdentityService\AzureServiceAuth\tokenprovider.json"
2018-10-16T00:37:52.0885142Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. Process took too long to return the token.
2018-10-16T00:37:52.0885221Z
2018-10-16T00:37:52.0885284Z Stack Trace:
2018-10-16T00:37:52.0885349Z at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsyncImpl(String authority, String resource, String scope)
2018-10-16T00:37:52.0885428Z at Microsoft.Azure.KeyVault.KeyVaultCredential.PostAuthenticate(HttpResponseMessage response)
2018-10-16T00:37:52.0885502Z at Microsoft.Azure.KeyVault.KeyVaultCredential.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2018-10-16T00:37:52.0886831Z at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
2018-10-16T00:37:52.0886887Z at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, CancellationToken cancellationToken)
2018-10-16T00:37:52.0886935Z at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.LoadAsync()
2018-10-16T00:37:52.0887000Z at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.Load()
2018-10-16T00:37:52.0887045Z at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
2018-10-16T00:37:52.0887090Z at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
2018-10-16T00:37:52.0887269Z at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
2018-10-16T00:37:52.0887324Z at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
2018-10-16T00:37:52.0887371Z at Microsoft.AspNetCore.TestHost.TestServer..ctor(IWebHostBuilder builder, IFeatureCollection featureCollection)
2018-10-16T00:37:52.0887433Z at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateServer(IWebHostBuilder builder)
2018-10-16T00:37:52.0887477Z at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.EnsureServer()
2018-10-16T00:37:52.0887525Z at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateDefaultClient(DelegatingHandler[] handlers)
var azureServiceTokenProvider = new AzureServiceTokenProvider("connectionString={your key vault endpoint};RunAs=App;AppId={your app id that you setup in Azure AD};TenantId={your azure subscription};AppKey={your client secret key}")
最佳答案
您不应在Azure DevOps Pipelines构建中对Azure KeyVault进行身份验证的集成测试,因为您使用的是Azure DevOps默认托管代理。
默认情况下,Azure DevOps Pipelines使用的是基本的默认托管代理,并且这些托管代理无法通过Azure订阅进行访问。这些不足为奇,因为这些托管代理是满足所有常见构建需求的通用代理,包括构建/编译,运行单元测试,获取测试覆盖率,并且所有这些任务都没有其他附加功能,例如具有ActiveDirectory,数据库和其他功能。对其他方的实际身份验证/请求,例如对任何Azure Keyvault的身份验证。因此,默认情况下,这些代理未在您的Azure订阅中注册。
如果要针对这些特殊需求进行成功的集成测试,则必须为Azure DevOps Pipelines构建和发布创建自己的代理。因此,除了创建自己的代理并将Azure DevOps配置为使用自己的代理外,没有其他方法可以强制Azure DevOps默认代理运行KeyVault身份验证测试。
要创建自己的代理,请查阅Microsoft的以下文档:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=vsts#install
更新于2018年10月29日:
为了更清楚,我也答复您的“Update 3”解决方法。当Microsoft更新Azure DevOps的默认托管代理时,无法保证您的解决方法将正常工作。
因此,我还需要补充一点:进行集成测试依赖于Azure DevOps Pipelines构建范围之外的另一方不是一个好习惯,例如连接数据库服务器或在其中使用外部身份验证(甚至在Azure KeyVault上) CI,尤其是在使用Microsoft的默认托管代理的情况下。
由于无效的身份验证配置,不仅会容易出错,而且无法保证默认托管代理上的进一步更新将确保您的第三方逻辑测试能够正常工作。
关于c# - VSTS生成管道:测试无法连接到Azure Key Vault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827004/
我目前正在学习保险库。我知道什么是 secret 引擎等以及它是如何工作的。但我没有找到任何关于 vault write 之间差异的信息。和 vault kv put .在我看来,这些命令做同样的事情
我已经在 k8s (AKS) 中安装了 vault 集群,现在我尝试使用 vault CLI 连接到该集群 问题是我找不到任何信息或文档。 我下载了 vault.exe,但是我在哪里配置它以连接到集群
我已经在 k8s (AKS) 中安装了 vault 集群,现在我尝试使用 vault CLI 连接到该集群 问题是我找不到任何信息或文档。 我下载了 vault.exe,但是我在哪里配置它以连接到集群
我在 docker 中运行Vault,如下所示: $ docker run -it --rm -p 8200:8200 vault:0.9.1 我已经打开了金库的密封: $ VAULT_ADDR=
我在 docker 中运行Vault,如下所示: $ docker run -it --rm -p 8200:8200 vault:0.9.1 我已经打开了金库的密封: $ VAULT_ADDR=
有没有办法在 SourceGear Vault Client 中查看已删除文件的内容和历史记录?我找到的唯一方法是取消删除文件,查看文件,然后再次删除文件。 我目前正在使用 Vault 4.1.2。
Vault 代理 v1.4.2 服务在 systemctl 下运行时无法呈现模板和创建文件。 但是相同的模板渲染按预期使用保险库代理服务中使用的命令工作 /opt/vault/bin/vault ag
是否可以列出存储在保险库后端的所有角色?我似乎找不到任何关于如何这样做的引用。 从文档中,似乎可以通过 auth/approle/role/my-role 列出给定角色名称的角色。 ,例如,但我没有看
我已经开始使用 Hashicorp 的 Vault 来管理 secret ,并且对 Vault 的日常密封有一些疑问。我的工作流程有两个身份验证后端;特定用户可以通过写入权限访问 Vault 以添加新
我无法理解 secret 列表的工作原理。我有具有路径权限的策略。 path "sys/mounts/*" { capabilities = ["create", "read", "update",
我们使用带有 Consul 的 Hashicorp Vault 作为存储,我们希望为 Vault 实现强大的备份和恢复策略。 我们特别希望在构建新的 Vault 服务器时备份所有 Vault 数据并使
我正在使用 Hashicorp Vault 和 java springVault,尝试生成几个键值对。执行此操作的最佳方法(或Vault API)是什么?理想情况下,此键值对是在 Vault 内生成的
我正在寻找更好的 secret 轮换解决方案,发现 Vault 动态 secret 是一个很好的解决方案。通过启用 secret 引擎,比如数据库,应用程序/服务可以租用动态 secret 。 我注意
这是official docs关于保管库提供商,事情是: provider "vault" { version = "2.10.0" address = "..." } 我确实设置了 VAUL
在 Docker 容器中运行时,vault -autocomplete-install失败。 $ docker run --privileged -ti vault:latest -autocompl
我只是在尝试新的 Vault UI .我希望能够使用用户名和密码登录。如何从命令行创建新用户以便我可以使用用户名和密码登录? 最佳答案 像这样创建一个新用户: vault write auth/use
我们已经为一台服务器安装并配置了 Hashicorp Vault AppRole 身份验证,通过存储 role_id和 secret_id在服务器上的本地文件中,我们可以让服务器上的代码从文件中读取值
我在本地安装了 Vault。我能够启动本地开发服务器并根据此官方教程 https://learn.hashicorp.com/vault/ 将一些 secret 写入/读取到 Vault kv 中 然
我正在使用 spring-cloud-vault 从 vault 服务器检索版本控制的 kv。当我使用 environemnt.getSecret("key1") 时,它仅返回最新版本的 key ,例
我不知道我是否做错了什么。 但这是我的配置。 // payload.json { "plugin_name": "postgresql-database-plugin", "allowed_r
我是一名优秀的程序员,十分优秀!