如何使用Octopus在多个环境中部署asp.net核心应用程序?

问题描述

我正在开发ASP.NET Core API(.NET Core 3.1)。一切正常。当我使用八达通在消费者环境上部署应用程序时,即使我将appsettings.Production.json设置为消费者,它也会读取appsettings.Uat.json,而不是ASPNETCORE_ENVIRONMENT

web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processpath="dotnet" arguments=".\Mydll.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

launchsettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,"anonymousAuthentication": true,"iisExpress": {
      "applicationUrl": "http://localhost:50900","sslPort": 0
    }
  },"$schema": "http://json.schemastore.org/launchsettings.json","profiles": {
    "IIS Express": {
      "commandName": "IISExpress","launchbrowser": true,"launchUrl": "default","environmentvariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },"IIS_UAT Express": {
      "commandName": "IISExpress","environmentvariables": {
        "ASPNETCORE_ENVIRONMENT": "Consumer"
      }
    },"IIS_PRODUCTION Express": {
      "commandName": "IISExpress","environmentvariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    },"ISOXMLValidationApi": {
      "commandName": "Project","environmentvariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },"applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}

章鱼变量:

enter image description here

解决方法

您是否在任何地方使用ASPNETCORE_ENVIRONMENT Octopus变量?章鱼不会自动使用该名称设置ENV变量,因此您可能需要在部署过程中添加脚本来完成此操作。

如果尚未执行此操作,则可以在目标上使用单独的“运行脚本”步骤,或者在“部署软件包”步骤上使用自定义部署脚本功能。

有关自定义脚本和软件包中脚本的信息:

还有一种可能,您不需要环境JSON配置文件,因为Octopus可以将变量值直接注入JSON配置文件中。

要使用PowerShell设置环境变量,其外观类似于

$aspEnvironment = $OctopusParameters["ASPNETCORE_ENVIRONMENT"]
[System.Environment]::SetEnvironmentVariable('ASPNETCORE_ENVIRONMENT',$aspEnvironment,[System.EnvironmentVariableTarget]::User)

请参阅https://www.tachytelic.net/2019/03/powershell-environment-variables/作为参考。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...