.net core GitlabCI不使用变量

.net core GitlabCI不使用变量,.net-core,continuous-integration,gitlab,gitlab-ci,continuous-deployment,.net Core,Continuous Integration,Gitlab,Gitlab Ci,Continuous Deployment,我将我的连接字符串保存在应用程序机密中,如果我从自己的计算机进行部署,它将起作用。现在,我想将这个值存储为GitlabCI变量,并在部署期间使用它。为了实现这一目标,我采取了以下步骤: 在GitlabCI中创建了连接字符串变量 修改了.gitlab ci.yml以使用此变量 before_script: - 'dotnet user-secrets set "ConnectionString" %CONNECTION_STRING%' build: stage: build scrip

我将我的连接字符串保存在应用程序机密中,如果我从自己的计算机进行部署,它将起作用。现在,我想将这个值存储为GitlabCI变量,并在部署期间使用它。为了实现这一目标,我采取了以下步骤:

在GitlabCI中创建了连接字符串变量

修改了
.gitlab ci.yml
以使用此变量

before_script:
  - 'dotnet user-secrets set "ConnectionString" %CONNECTION_STRING%'
build:
 stage: build
 script:
  - 'dotnet build -c Release /p:DeployOnBuild=true /p:PublishProfile=Properties/PublishProfiles/MyPublishProfile.pubxml'
已修改
Startup.cs
类以使用此机密

 private IConfiguration SecretConfiguration { get; }

 public Startup(IConfiguration configuration) {
     SecretConfiguration = configuration;
 }

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddCors();
     services.AddDbContext<StudentRepository>(options =>
          options.UseMySQL(SecretConfiguration["ConnectionString"]));        
     services.AddMvc();        
 }
private IConfiguration SecretConfiguration{get;}
公共启动(IConfiguration配置){
SecretConfiguration=配置;
}
public void配置服务(IServiceCollection服务)
{
services.AddCors();
services.AddDbContext(选项=>
使用MySQL(SecretConfiguration[“ConnectionString”]);
services.AddMvc();
}
部署成功,但连接设置不正确。当我点击在数据库中搜索内容的端点时,我得到

System.ArgumentNullException:值不能为null。参数名称: 连接字符串在 Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(字符串值, 字符串参数(名称)


尝试在before_脚本/脚本中打印env,以检查问题是否缺少env,或者env是否无法到达build命令。在部署过程中,按照我的要求创建密钥。我可以按你的建议打印出来。但我想还有别的。。。如果我错了,请纠正我,在部署期间创建应用程序机密会在部署器计算机上创建应用程序机密,一旦部署完成,应用程序在外部主机上启动,机密就不存在了。所以我得到的全部想法都是错误的?你应该能够访问阶段中的秘密你是说秘密在构建阶段应用于我的应用程序?好吧,那么有些事情并没有像预期的那样起作用。。。存储在Secret中的所有密钥在分发后都为
null
。如果我将它们存储在本地计算机上,只需键入
dotnet run
,效果很好。@weeedoo但您最终是否尝试过使用
$
?如果您使用的是公共GitLab Runner,那么应该使用
$
。如果您正在托管自己的GitLab Runner实例,请使用适用于托管运行程序的操作系统的符号。尝试在before_脚本/脚本中打印env,以检查问题是否缺少env或env无法到达构建命令。在部署过程中,密钥是按照我的要求创建的。我可以按你的建议打印出来。但我想还有别的。。。如果我错了,请纠正我,在部署期间创建应用程序机密会在部署器计算机上创建应用程序机密,一旦部署完成,应用程序在外部主机上启动,机密就不存在了。所以我得到的全部想法都是错误的?你应该能够访问阶段中的秘密你是说秘密在构建阶段应用于我的应用程序?好吧,那么有些事情并没有像预期的那样起作用。。。存储在Secret中的所有密钥在分发后都为
null
。如果我将它们存储在本地计算机上,只需键入
dotnet run
,效果很好。@weeedoo但您最终是否尝试过使用
$
?如果您使用的是公共GitLab Runner,那么应该使用
$
。如果您正在托管自己的GitLab Runner实例,那么请使用适用于托管运行程序的操作系统的符号。