23
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NETAdvent Calendar 2014

Day 5

デプロイ時にWeb.configに値を設定する Parameters.xml の話

Last updated at Posted at 2014-12-04

背景

ASP.NET で作ったサイトを Web Deploy パッケージを作成し、
バッチファイルによる展開をしている環境で、発行(デプロイ)時に値を設定したくなることがあると思います。

特によくあるのが次の2つのケースです

  • パスワードを含むデータベース接続文字列・マシン鍵などはソースコード管理に入れたくない
  • 一時的にIPアドレス制限をかけたい

この時役に立つ方法が
Web 配置パッケージで Web 配置パラメーターを使用する
です。

環境によって異なる値を設定する2つの方法

ビルド時に設定する Web.*.config

VisualStudio2013で ASP.NET MVC プロジェクトを作成すると
Web.config と一緒に Web.Debug.config , Web.Release.config の2つのファイルが生成されます。
どちらも Web.config に対する値変更を指示する XSLT ファイルです。

  • Web.Debug.config は Debugビルドの時にのみ適用される
  • Web.Release.config は Releaseビルドの時にのみ適用される

本番環境用のデータベース接続文字列を Web.Release.config に記述すれば、
環境による違いを吸収して自動化することができます。

デプロイ時に設定する SetParameters.xml

Web Deploy パッケージの作成をすると、5つのファイルが生成されます。

QS_20141204-110346.png

このうち SetParameters.xml にある値がデプロイ時に上書きされます。

すなわちここにパスワードを記述すれば、
本番環境のデプロイ担当者だけが、パスワードにアクセス可能で、
ビルド環境を触る開発者やソースコードリポジトリにパスワードを曝さなくて済むようになりました。
イヤッホウ!

aspnetParametersXml.png

Parameters.xml でデプロイ時に設定する対象を追加する

接続文字列についてはVisualStudioが自動的に判定して設定可能にしてくれますが、
それ以外の値を設定可能にするには Parameters.xml を ASP.NET プロジェクトの最上位フォルダ(Web.configの隣)に配置します。

例えば ipSecurity を Web.config に記述したとして、その allowUnlisted 属性の値を変更したいのであれば、
以下のようになります。

Web.configの一部
<?xml version="1.0" encoding="utf-8"?>
<configuration>
......
  <system.webServer>
    <security>
      <ipSecurity allowUnlisted="false">
        <add ipAddress="127.0.0.1" allowed="true" />
      </ipSecurity>
    </security>
  </system.webServer>
......
```


````Parameters.xml
<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <parameter name="/configuration/system.webServer/security/ipSecurity/allowUnlisted" description="IPアドレス制限">
    <parameterEntry kind="XmlFile"
                    defaultValue="false"
    scope="\\Web.config$"
    match="/configuration/system.webServer/security/ipSecurity/@allowUnlisted" />
  </parameter>
</parameters>
```

ここで、WebDeplay パッケージの作成をすると、 Setparameters.xml に行が増えます

![QS_20141204-113615.png](https://qiita-image-store.s3.amazonaws.com/0/61535/4e76c0a7-4364-0b5b-200f-a191dd56a731.png)

WebDeploy パッケージのバッチファイルを利用してデプロイ実行すると

![QS_20141204-113704.png](https://qiita-image-store.s3.amazonaws.com/0/61535/4b322c2b-dc3f-dab1-8757-28547ff90439.png)

IISアプリケーションとして展開された先の Web.config の値が書き換わりました!

![QS_20141204-113734.png](https://qiita-image-store.s3.amazonaws.com/0/61535/fda30405-533f-e9f6-fb7a-ceffd6fc92ea.png)

## 最後に

この機能については、日本語の記事に全く当たらず、
 pubxml ファイルに何か書けばいけるのではないか?など長らく悩んだ過去がありました。

CI、自動ビルドの結果を WebDeployパッケージの形で管理しているような環境であれば
役に立つのではないかと思います。
23
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?