kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Windows Server Coreの初期設定を行う

PowerShellだけでやろうかと思っているので、たぶんWindows Server 2012 R2以降じゃないとできないはず。まだやってる最中なので、適宜追記予定。

コンピュータ名の変更

Rename-Computer -NewName 2016tp5 -ComputerName .

これで2016tp5というコンピュータ名に代わる

Active Directoryドメインに参加する

Add-Computer -DomainName CONTOSO -Restart

Contosoドメインに参加する。ドメイン参加するための認証ダイアログが表示されるので、適宜入力。-Credencialを指定するとその認証を使ってくれる。

リモート管理を有効にする

コマンドプロンプトから

Winrm qc

PowerShellで

Set-Item WSMan:\localhost\Client\TrustedHosts * -Force

これで enter-pssession コンピュータ名 -Credential administrator などでリモート管理可能になります。

システムロケールを英語に変更(英語版を入れた人は不要)

set-WinSystemLocal en-us
restart-computer

なぜかといえば、現時点ではコンテナは英語じゃないとうまく動かないものがあまりにも多いため。

Windows コンテナをインストール

TP5の場合、この記事参照。

Getting started with containers and Docker on Windows Server 2016 Technical Preview 5 | Julien Corioland – Microsoft Azure Technical Evangelist

最初にWindows Containerの機能をインストールするが、その際一度再起動が実施される。再起動前にdockerクライアントはインストールされないため、このスクリプトを二回動かす必要がある。

powershell.exe -NoProfile C:\Install-ContainerHost.ps1

firewallの設定

(以下Todo)

  • Hyper-Vリモート管理を有効にする
  • Hyper-V 管理クライアントを有効にする
  • Firewallリモート管理を有効にする
  • 「仮想マシンの監視」リモート管理を有効にする

この辺で一通りできるようになるかな。

Azure DevTest Labsでテスト用仮想マシンを作るべき理由

Azure DevTest Labs | Microsoft Azure

まだプレビューですが、Azure DevTest Labsというサービスがあります。これはテスト用の仮想マシンの作成と管理に特化したサービスです。Azure 仮想マシンほど細かくいろいろ設定することはできないのですが、その分かなりお手軽になっており、ARMで作る仮想マシンと比べて以下のような利点があります。

テンプレートが異様に短い

最低限の仮想マシンでも大体これくらいです。診断の拡張機能や初期設定をしようとPowerShell DSCの拡張機能を入れるともっと長くなります。

azure-quickstart-templates/azuredeploy.json at master · Azure/azure-quickstart-templates · GitHub

対して、DevTest Labsで作る仮想マシンテンプレートはこんな感じ。実はこれでGitとAzure PowerShellが入ります。

Azure DevTest Labs Deploy sample script

PowerShell DSCを使わなくてもいろいろ入る

PowerShell DSCでリソース使えばもちろんいろいろ入るのですが、Azureで試行錯誤するのは結構大変です。DevTest Labsではデプロイ時についでにいくつかのソフトを追加できます。Chocolatyを指定できるので、パッケージを入れることや、Gitのリポジトリクローン、PowerShellスクリプトの実行、VSTSのdropフォルダのコピーとか便利ですね。

f:id:kkamegawa:20160405052244p:plain

JSONだとこの辺。

https://gist.github.com/kkamegawa/bfb437684d56f05bfa99308a6ca4f9ad#file-windowsvirtualmachine-json-L60

自動運転が最初から入っている

azure.microsoft.com

Azure Automationを使えば自動運転を設定することができますが、DevTest Labsでは最初から設定することができます。

f:id:kkamegawa:20160405052245p:plain

停止し忘れてクラウド破産とか(あるていど)防げそうです。通常は日中の自動運転でしょうが、例えば夜間に自動テストしたい、というような場合は夜間にのみ動くLabを作ればいいでしょう。

コスト上限の設定

仮想マシンを無制限に立てられると同じくクラウド破産になりそうですが、あらかじめユーザごとにいろんな上限を設定することができます。

  • 仮想マシン数
  • 仮想マシンのサイズ
  • DevTest Labs単位での仮想マシン数上限

まだ残念なところ1 - Visual Studioからの配置ができない

そのうち直るんでしょうが、残念ながらAzureのQuickStartから仮想マシンのテンプレートを流用して作った場合、配置ができません。Visual Studioの配置でStorageアカウントを指定するところがあるのですが、こんなのいらないので、削除したら配置ができなくなりました(てへっ)。

PowerShellから実行すればいいので、そんなに困りません。CIも大丈夫のはずです。

まだ残念なところ2 - Visual Studioのテンプレートがない

uservoiceに上がってるし、事実上New-AzureRmResourceGroupDeploymentひとつ発行するだけでいいので楽なんですが、やっぱり作ってほしいですねぇ。あと、テンプレートはDevTest Labsから仮想マシンを作ってView Templateでみればわかると思います。

まとめ

いくつかちょっと難しいとところもあるけど、ARMのテンプレートが圧倒的に小さく、追加インストールするソフトがある場合は助かります。テスト用の仮想マシンだとそんなに難しいものはいらないので、今後はこのDevTest Labsに仮想マシンを作っていこうと思います。

VSTSでAzure Resouce Managerでのデプロイ事前準備と注意点

Visual Studio Team Servicesの新しいビルド定義では、ARM Resource Managerを使用したデプロイタスクを作ることができます。

f:id:kkamegawa:20160126221351p:plain

もちろんデプロイ前にAzureのサブスクリプションと関連付ける必要があるのですが、普通なら https://(account).visualstudio.com/DefaultCollection/(Project)/admin/services を開いてCertificate Basedを選べばいいのですが、ARMの場合はService Principal Authenticationでなくてはならないようです。ちなみにCertificate Basedを選んで実行すると、こんなエラーが出て失敗します。

Certificate based authentication only works with the 'Select Resource Group' action. Please select an Azure subscription with either Credential or SPN based authentication.

SPNで入力する情報わからない!という場合、ちゃんとスクリプトがあります。

blogs.msdn.com

ただ、このスクリプト試してみたのですが、バグやら、記述が古かったり(Azure PowerShell 1.0に対応していない)、仕様上の漏れがあったりして使えなかったので、少し改変してみました。

Generate Azure SPN script, based on http://blogs.m ...

SPNを使う場合、サブスクリプション名や現在のログオンアカウント名でSPN用のURIを作るのですが、当然サブスクリプション名に空白があったり、ユーザ名がANK以外であったりするとよくはないので、その辺をチェック&空白は _ に変更するなどの対処をしています。

引数はAzureのサブスクリプション名を正確に入れて下さい(MSDN for Visual Studio hogeとかそんな文字列)。もしもサブスクリプション名が日本語だった場合、ソースのサブスクリプション名を取得しているところを適当なANK文字列にしてみてください。

Windowsのログオンユーザ名がANK以外だった場合も同様です。こちらはPowerShellスクリプト内でチェックしているので、エラーになって止まるはずです。

最後まで実行すると文字列が出るはずなので、その文字列をAzureサブスクリプションの情報として入力してください。これでいけるはずです…たぶん。

で、最後に。現時点(2016/1/26)において、VSTSのサーバ内にあるビルドエージェント(Hostedを選択した場合)のAzure PowerShellはまだ0.9.8なので、Switch-AzureModeでの切り替えが必要です。

しかし、Azure SDK 2.8.2でインストールされるVisual StudioのResource Managerのテンプレートはすでに1.0仕様になっています。なので、Azure PowerShell 1.0以降がインストールされている環境にビルドエージェントをインストールして、Hostedを使わないようにしましょう。たぶんそう遠くない時期に置換されるとは思いますが。

DevOpsハッカソンでARM使ったデプロイをされるチームが一つや二つはあると思います。その時にでも試してみてください。

whereコマンドと同じPowerShell関数

PowerShellでスクリプトを作っていたところ、環境変数PATHの中にあるコマンドを探してくれるwhereコマンドと同じコマンドレットがなさそうだったので、さくっと作ってみました。

whereコマンドでファイルを探す − @IT

It is same as ms-dos command where.exe

Javaがインストールされているかどうか調べたかったんですよね。インストールされていなければ、chocolateyなどでインストールする、という方法になります。