我有一个在 Azure Devops 中构建的 ASP.NET Core Web API。我必须在构建过程中提取出招摇。
因此我发出以下命令:
- task: CmdLine@2
displayName: 'Generate Swagger'
inputs:
script: |
dotnet new tool-manifest
dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli
cd Api
set ASPNETCORE_ENVIRONMENT=Development
dotnet swagger tofile --output $(Build.ArtifactStagingDirectory)/swagger.json $(System.DefaultWorkingDirectory)/src/Api/bin/Release/net8.0/Api.dll v1
workingDirectory: '${{ parameters.workingDirectory }}'
问题是,我的印象是它会启动应用程序,因为它会查找我的
appsettings.json
,一旦填充,它就会尝试连接到 BDD。
如何在 CI 中生成 Swagger?
用
appsettings.json
方法加载 Main
文件 :
IConfiguration Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddEnvironmentVariables()
.Build();
我以前从未使用过该工具,但如果您需要基于
appsettings.json
环境变量加载正确的 ASPNETCORE_ENVIRONMENT
文件,请尝试使用 env
属性,这是为任务设置环境变量的推荐方法。
此方法适用于不同类型的代理(Windows、Linux、macOS),确保您的管道行为一致,无论代理类型如何。
尝试:
- task: CmdLine@2
displayName: 'Generate Swagger'
inputs:
script: |
dotnet new tool-manifest
dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli
cd Api
dotnet swagger tofile --output $(Build.ArtifactStagingDirectory)/swagger.json $(System.DefaultWorkingDirectory)/src/Api/bin/Release/net8.0/Api.dll v1
workingDirectory: '${{ parameters.workingDirectory }}'
env:
ASPNETCORE_ENVIRONMENT: 'Development'
代替:
- task: CmdLine@2
displayName: 'Generate Swagger'
inputs:
script: |
dotnet new tool-manifest
dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli
cd Api
set ASPNETCORE_ENVIRONMENT=Development
dotnet swagger tofile --output $(Build.ArtifactStagingDirectory)/swagger.json $(System.DefaultWorkingDirectory)/src/Api/bin/Release/net8.0/Api.dll v1
workingDirectory: '${{ parameters.workingDirectory }}'
参见环境变量