次のタスクでVSTSを使用して、ASP.NETCoreアプリケーションをIIS)に展開しようとしています。
ただし、MSドキュメントを何度も調べて参照した後、展開の環境変数を設定する方法が見つかりませんでした。環境スコープのリリース定義で設定した変数が環境変数として設定されていません。
それを達成する方法はありますか?
環境変数を設定する別のアプローチ(XML transform
アプローチを使用する以外)は、appCmd
コマンドを使用してApplicationPoolスコープに環境変数を設定するPowershellタスクを追加することです。
C:\Windows\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='XyzPool'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Dev']" /commit:apphost
VSTSで設定した環境変数は、展開自体(つまり、アプリケーションの構築や単体テストの実行など、VSTSが実行するすべてのもの)に使用されますが、ランタイムアプリケーションは、それをホストするサーバー上にあるものを使用します。
デプロイされたアプリケーションでも環境変数を使用する場合は、VSTSがデプロイされているIISサーバーで環境変数を設定する必要があります。Microsoftのドキュメントには、サーバーに応じてこれを設定する方法が示されています。 環境の設定
コメントに応じて更新:
環境変数を設定するための推奨される方法は、マシン自体です。デプロイ先のIISサーバーにログインし、ASPNETCORE_ENVIRONMENT
にsystem properties -> advanced settings -> environment variables
環境変数を追加します。
何らかの理由でこれを実行できない場合は、Web.config
ファイルで設定できます(そのドキュメントによる)。常に同じ値を設定している場合は、必要なものをWeb.config
にそのように入れることができるはずです。
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
XML変換が本当に必要な場合(正直なところ、この状況で必要かどうかはわかりません。これは、ビルド構成に基づいて展開時にWeb.config
ファイルを変更するためです。他の誰かが述べたように、aspを使用します。 .netコア推奨される構成セットアップはappsettings[.environment].json
ファイルであり、一致するマシンレベル(ASPNETCORE_ENVIRONMENT
env変数)に基づいて自動的にロードされます。正しい構文を使用して変換ファイルに変換を実際に定義する必要があります。変更したい部品を交換します。これは明らかにより難しいオプションです。
参照: 方法:Webアプリケーションプロジェクトを展開するときにWeb.configを変換する 変換ファイルの作成および Visual Studioを使用したWebプロジェクト展開のWeb.config変換構文 構成そのパスをたどることを選択した場合の構文
このようなもの(現在テストすることはできませんが、これでアイデアが得られるはずです。変換ファイルの変換名前空間とxdt:
属性に注意してください)。ロードされる変換ファイルは、VSTSタスクの一部として構成する必要があるビルド構成と一致すると思います。
Web.config
<configuration>
<system.webServer>
<aspNetCore ...>
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
Web.Release.config(ビルド構成「Release」の変換ファイル)
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
<system.webServer>
<aspNetCore ...>
<environmentVariables>
<environmentVariable xdt:Transform="Replace" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
Web.configを使用するASP.NETCore 1.xプロジェクトの場合、以下を使用できます。
デプロイメントには「開発」環境があるため、次の構成ファイルをプロジェクトにコミットします。
web.Dev.config
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0" xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
<system.webServer>
<aspNetCore>
<environmentVariables xdt:Transform="InsertIfMissing" />
<environmentVariables>
<environmentVariable xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" />
<environmentVariable xdt:Transform="Replace" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
configuration
要素に同じ名前空間属性がない場合は、上記のconfiguration
要素からxmlns=""
属性を削除してください。Project.jsonで、publishOptions => includeの下に追加します。
"web.dev.config"
これがリリースパイプライン内で使用するPowerShellスクリプトです(ビルド内でASPNETCORE_ENVIRONMENTを設定するのは好きではありません)
引数:
-p $(System.DefaultWorkingDirectory)\$(Build.DefinitionName)\drop\testbld-Test\web.config -e Development
インラインスクリプト:
param ([string]$p,[string]$e)
$doc = new-object System.Xml.XmlDocument
$location = "$p"
$doc.Load($location)
$subNode = $doc.CreateElement("environmentVariable")
$node = $doc.CreateElement("environmentVariables")
$doc.SelectSingleNode("//aspNetCore").AppendChild($node)
$doc.SelectSingleNode("//environmentVariables").AppendChild($subNode)
foreach($nd in $subNode) {$nd.SetAttribute("name", "ASPNETCORE_ENVIRONMENT");$nd.SetAttribute("value", "$e");}
$doc.Save($location)
以下の手順を参照してください。
restore
)build
)publish
; Webプロジェクトの公開オプションを確認;引数:--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)
; Zip Published Projects
オプションを確認)$(build.artifactstagingdirectory)
)$(System.DefaultWorkingDirectory)\**\*.Zip
; XML transformation
オプションを確認します(変換ソースファイルを探すための環境名に基づいています)web.[environmentname].config
ファイル(例:web.QA.config)がweb.config
ファイルに変換されます。XDT transform taskを使用して実行することもできます(ファイルをZipファイルに含めることはできないため、Zip Published Projects
オプションのチェックを外します:step4、リリースのArchive Files
taskを介してファイルをアーカイブします)