web-dev-qa-db-ja.com

VSTS / TFSセット環境変数ASP.NETコア

次のタスクでVSTSを使用して、ASP.NETCoreアプリケーションをIIS)に展開しようとしています。

enter image description here

ただし、MSドキュメントを何度も調べて参照した後、展開の環境変数を設定する方法が見つかりませんでした。環境スコープのリリース定義で設定した変数が環境変数として設定されていません。

enter image description here

それを達成する方法はありますか?

7
ubi

環境変数を設定する別のアプローチ(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
0
ubi

VSTSで設定した環境変数は、展開自体(つまり、アプリケーションの構築や単体テストの実行など、VSTSが実行するすべてのもの)に使用されますが、ランタイムアプリケーションは、それをホストするサーバー上にあるものを使用します。

デプロイされたアプリケーションでも環境変数を使用する場合は、VSTSがデプロイされているIISサーバーで環境変数を設定する必要があります。Microsoftのドキュメントには、サーバーに応じてこれを設定する方法が示されています。 環境の設定

コメントに応じて更新:

環境変数を設定するための推奨される方法は、マシン自体です。デプロイ先のIISサーバーにログインし、ASPNETCORE_ENVIRONMENTsystem 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>
4
Kirlac

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>
  • 上記は、web.configにenvironmentVariablesセクションがまだ存在しない場合は、それを作成します。
  • web.Dev.configの「Dev」を必要に応じて他の環境名に置き換えます。
  • 上記の例で使用されているASPNETCORE_ENVIRONMENTは、他の変数に変更します。
  • Web.configのconfiguration要素に同じ名前空間属性がない場合は、上記のconfiguration要素からxmlns=""属性を削除してください。

Project.jsonで、publishOptions => includeの下に追加します。

"web.dev.config"

VSTS展開では、IIS Web App Deployタスクの下の「XML変換」を確認してください: XML transformation checkbox

2
Tolga

これがリリースパイプライン内で使用する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)
1
Helzgate

以下の手順を参照してください。

  1. 構成ファイルのプロパティを設定します(例:web.config、web.QA.config)、出力ディレクトリにコピー:新しい場合はコピー)
  2. .NET Coreタスク(コマンド:restore
  3. .NET Coreタスク(コマンド:build
  4. .NET Coreタスク(コマンド:publish; Webプロジェクトの公開オプションを確認;引数:--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory); Zip Published Projectsオプションを確認)
  5. ビルドアーティファクトの公開(公開するパス:$(build.artifactstagingdirectory)
  6. リリース定義を開き、環境名を変更します(たとえば、QA、構成ファイル名と一致します)
  7. IIS Web配置タスク:(パッケージまたはフォルダー:$(System.DefaultWorkingDirectory)\**\*.Zip; XML transformationオプションを確認します(変換ソースファイルを探すための環境名に基づいています)
  8. 次に、web.[environmentname].configファイル(例:web.QA.config)がweb.configファイルに変換されます。

XDT transform taskを使用して実行することもできます(ファイルをZipファイルに含めることはできないため、Zip Published Projectsオプションのチェックを外します:step4、リリースのArchive Files taskを介してファイルをアーカイブします)

0