- ビルドを開発者のPCではなくてサーバーでする
- ビルド(Debug、Release)-> Single Package -> デプロイ(Production、Staging)
- Visual Studio および ASP.NET の Web アプリケーション プロジェクトの配置の概要
- DBへの接続設定とかはデプロイするときに与えるようにする
- Web.Config変換ではなくてMSDeployのパラメータとして
- ビルド(Debug、Release)-> Single Package -> デプロイ(Production、Staging)
- PublishとDeployという言葉は何を指している?
- VisualStudioの項目としては
- Publish=発行
- Deploy=配置
- ?=公開
- この周辺では同じ意味で使われているっぽい
- VisualStudioの項目としては
- VisualStudioの「発行」ダイアログで作った発行プロファイルを使ってデプロイパッケージを作りたい
- コマンドラインオプションにDeployOnBuild=trueを足すことでVisualStudioの「発行」と同じことができる。
- MSBuild
- ログの出し方
- /fl1 /flp1:logfile=file.txt;verbosity=diagnostic;summary;encoding=utf-8
- visual studioでのビルドログは、「出力」ウィンドウからテキストをコピーして取得する
- msbuildの応答ファイル ".rsp"
- 改行できる。#でコメント。
>msbuild @file
- 処理の追い方
- AfterTargets
- InitialTarget
- DependsOnTargets
- BeforeTarget
- AfterTarget
- ログの出し方
- ターゲットファイルを眺める
- 標準ビルドプロセス
- 標準ビルドプロセスからどうやって、DeployOnBuildの処理が実行されるの?
- それは、/target=packageと関係あるの?
- target"Package"は、VS2010からある。
- /p:CreatePackageOnPublishは古いやりかた
- Microsoft.Web.Publishing.targets
- Line:2852 Target "Package"
- Line:3852 Target "PackageUsingManifest"
<BuildDependOn> $(BuildDependsOn) Package </BuildDependOn>
- Line:184
- parameters.xmlってなに?
- WPPとパブリッシュプロファイル
- Line:429
- パッケージ作成のプロパティ
- Line:758
- WebPublishMethodのtargetファイルをインポート
- web\Deploy\Microsoft.Web.Publishing.Deploy.Package.targets
- Line:2852
- calltarget "PackageUsingManifest"
- DeployOnBuildで、AfterTargets "PrepareForRun"で処理を差し込んでる。
- 標準ビルドプロセス"Build"のDependsOnの"CoreBuild"のDependsOnの"PrepareForBuild"
- デスクトップビルド
- TeamFoundation の用語
- https://msdn.microsoft.com/ja-jp/library/ms181292(v=vs.90).aspx
- デスクトップビルドの反対はパブリックビルド?
- デスクトップビルドは、コンパイルとテストのみを実行する。同期、クリーン、コピーなどのステップは実行しない。
- VisualStudioの"発行"機能(Web Publishing Pipeline "WPP")
- .pubxmlは、(%program%\MSBuild\Microsoft\VisualStudio\v14.0\Web)のMicrosoft.Web.Publishing.targetsにある
- DeployOnBuildが、WPPの機能を有効化する。
- /p:WebPublishPipelineCustomizeTargetFile
- ASP.NET Web Deployment using Visual Studio: Command Line Deployment
- FAQ大事なことが書いてある
- Visual Studio と Azure Websites の発行周り小ネタまとめ しばやん雑記
- 追加の設定ファイル
- .publishsettings
- .wpp.targets
- .pubxml
- 読み込まれるには、名前と場所の条件
- 標準ビルドプロセス
- パッケージってなんだ
- パッケージの作り方を指定する
- 結局このプロパティ
- DeployOnBuild
- DeployTarget
- 既定値がPackageなので省略可能
- PackageLocation
- DeployAsIISApp
- IncludeSetAclProviderOnDestination
- pubxmlでConfigurationプロパティをReleaseに設定してもDebugでビルドされる。/p:Configuration=Release
- Configurationプロパティはコマンドラインパラメータで指定しないといけない
- どういうパッケージを作りたいか
- 「発行」で作られるパッケージのバッチファイル
- ファイルコピーだけにしたい
-source:contentPath=[フォルダのパス] -dest:contentPath=[Webアプリケーションの名前]
- WPPのプロパティを使う
- DeployAsIISApp=false
- IncludeSetAclProviderOnDestination=false
リモートのSQLServerをManagement Studioから再起動させるにはWMIの構成が必要
Management StudioでリモートのSQLServerを再起動できなかった。
"sa"アカウントで接続してもメニューにある"再起動"がグレーアウトしていて選択できない。
SQLServerのあるローカルから"sa"で接続すると再起動できる。
クライアント側のイベントログにエラーも出てる
DistributedCOM
構成されているどのプロトコルを使っても、DCOM がコンピューター [リモートのコンピューター名] と通信できませんでした。要求元 PID 25f8 (C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\Ssms.exe)。
SQLServerの再起動はWMIという仕組みで使える機能だそうで、SQLServerとの接続とは別の仕組みでリモートのWindowsと通信する必要があるみたい。SQLServerの状態アイコンも同じ。
SQL Server ツールでサーバーの状態を表示できるようにする WMI の構成
ManagementStudioでは起動したwindowsアカウントで接続をするのかな だとしたら、ワークグループ環境では接続先にも同じ名前とパスワードのアカウントを作って...ってやる必要があるかも あとファイアウォールの設定とかも必要か。
いま扱ってるのはAWS EC2だからRunCommandでやることにする。
SQLServerのネットワーク構成をコマンドラインから変更した
AWS EC2でSQLServerのインスタンスを作ったときにExpressエディションではリモートからアクセスできなかった。 Webエディションではできたのに。
エディションによって、ネットワーク構成の既定値が違うらしい。Expressエディションでは、TCP/IPが無効になっている。
SQL Server の既定のネットワーク構成
GUIの構成マネージャーから有効にすればOK。 でもコマンドラインからしたい。
SQLServer管理オブジェクト(SMO)が用意されているのでこれを使えばいいらしい。 SMOは.NET Framework アセンブリなのでPowerShellから使える。
サーバー ネットワーク プロトコルを有効または無効にする方法 (SQL Server PowerShell)
SQL Server 管理オブジェクト (SMO) プログラミング ガイド
SQL Server PowerShell
#TCP/IPでの接続を有効にする(SQLServerの再起動が必要) Set-ExecutionPolicy -Scope Process RemoteSigned -Force Impoert-Module 'sqlps' $wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer' $tcp = $wmi.GetSmoObject("ManagedComputer[@Name='computerName']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']") $tcp.IsEnabled = $true $tcp.Alter()
今回は必要なSMOアセンブリだけを読み込めば十分なんだけど、sqlpsモジュールをインポートしとけばロードされるアセンブリに必要なものが含まれてるから便利。
初期値がListenAll=yesになっているので、IsEnable=trueにすれば全部のIPアドレスが有効になる。
ServerProtocol クラス (Microsoft.SqlServer.Management.Smo.Wmi)
::SQLServerを再起動する net stop MSSQLSERVER /y net start SQLSERVERAGENT
停止するときは、/yオプションでエージェントも停止させる。 エージェントを起動するとSQLServer本体も起動する。