kkamegawa's weblog

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

Azure Active Directory Domain ServicesでTFSを使ってみる

Azure Active Directory Domain Servicesができたときからぜひ使ってみたいと思っていました。フルマネージドなので、AD特有の面倒なことが解消されそうです。

azure.microsoft.com

ただ、いろいろ問題もあります。

  • 高い。裏で4台くらいのサーバーを動かしているので、しょうがないのですが、もうちょっとお安くならないものかと…。
  • 全部の機能が使えない。例えば、Domain AdminやEnterprise Adminといった権限はないので、Kerberos認証に必要なsetspnが使えません。これは回避策があります(後述)。
  • 現在、クラッシックデプロイしかサポートされていないので、ARMベースのデプロイする仮想マシンとつなぐ場合VPNが必須。

田中さんもかかれているので、こちらもどうぞ。

tech.tanaka733.net

作ってみる

f:id:kkamegawa:20170727063925p:plain

Azureポータルから、Azure AD Domain Servicesを検索して作っていきます。

f:id:kkamegawa:20170727063921p:plain

ディレクトリは初期値では「既定のディレクトリ」しかないので、選択できません。カスタムドメイン(exsample.jpなど)を作りたい場合は、クラッシックポータルからドメインを作っておきましょう。既定のディレクトリは~.onmicrosoft.comが作られています。

このonmicrosoft.comの前のドメイン名はクラッシックポータルでは変更できるように見えるのですが、変更してもユーザー追加のところで追加できないので、変えないでおきましょう。そのまま。

リソースグループやら、場所を選択します。

f:id:kkamegawa:20170727063914p:plain

ネットワークに仮想ネットワークとアドレス空間、サブネットを指定します。DNSで二つとられるし、なに使うかわからないので、どーんととっておきます。ここでは/22を指定しています。クラッシックポータルで作るときは/22位がデフォルトだったはずですが、新ポータルでは/24がデフォルトです。

サブネットは/24を指定しています。

f:id:kkamegawa:20170727063911p:plain

これでOK押して確定。

f:id:kkamegawa:20170727064222p:plain

AAD DC Administratorsというグループがいわゆるドメイン管理者(正確にはもっとロックダウンされていますが)になります。とりあえずここでサブスクリプションの管理者を追加しておきます。

f:id:kkamegawa:20170727064218p:plain

で、これで全部できました。OKを押すとデプロイが始まります。Azure AD Domain ServicesはVPNと仮想マシンを結構いっぱいデプロイするので、実際に使用できるまでにかなり時間がかかります。30分くらいは見ておいたほうがいいです。

f:id:kkamegawa:20170727063932p:plain

その間、クラッシックポータルでユーザーを追加しておきます。TFSをActive Directoryで使う場合、AP層のユーザー、SQL Server Reporting(もうほとんどいらなくなりましたが)のユーザー、SQL Server用のユーザーあたりはあったほうがいいです。作っておきましょう。

ここで追加したユーザーはドメイン内の一般ユーザーになります。username@~.onmicrosoft.comでログオンできるユーザーですね。

VPNピアリング

f:id:kkamegawa:20170728054941p:plain

クラッシック仮想マシンなら必要はないのですが、もう今どきクラッシック使いたくないですよね。Azureの新機能の恩恵もうけれないし。ということでVPNピアリングを設定します。

注意点としてはIPアドレス空間が重ならないように、ということくらいです。

docs.microsoft.com

Kerberos の制約付き委任を構成する

docs.microsoft.com

setspnが使えないので、こちらの方法でKerberosの制約付き委任を構成します。

完成

これで一通りできました。あとは普通にWindows Serverを構成して、仮想ネットワークだけ明示的に既存のものを指定するだけです。

Windows Serverのドメイン参加はAAD DC Adminグループに追加した@~.onmicrosoft.comユーザーで実施します。ドメインに参加した後、Windows Serverのドメインログオンは username@~.onmicrosoft.comでできます。

Visual Studio Team Services 2017/6/22の更新

VSTSの6/22の更新(Sprint 119)のリリースノートの概要訳を行いました。オリジナルはこちらから読んでください。

www.visualstudio.com

今回の更新は一部先日公開されたTFS 2017 Update 2 RC2にも含まれています。アイコンの見た目が変わって、ぱっと見識別しやすくなりましたね。

影響が大きいところではHosted Agentが変わって、Visual Studioのバージョンに対応するHosted Agentが用意されるようになったことですね。デフォルトのプールがなくなるので、今後注意が必要になります。将来的にはコンテナにしたいみたいなことを書いていましたが、でかくなるんだろうな…。

あと、作業項目フォームの各フィールドに枠線がつけられるようになったのは助かります。確かに枠線がないと、どこ入力していいのかわからないんですよね。早速切り替えましたw。

パッケージ管理のフィードがわかりやすくなったのもいいですね。GUID大好きなMSですが、ここは廃止したほうがいいように思います。

後何気に気付いたんですが、前回のSprint 118の翻訳でちょうど翻訳始めてから一年になりました。これからも怒られないか、MSがやらない限りはぼちぼち続けていきますんで、よろしく!

ではまた三週間後。

translate to Japanese to VSTS release notes from h …

VSTS/TFSの継続的インテグレーションとデータベース接続と単体テスト

データベース接続を動的に作る

最近、id:ishikawa-tatsuya さんのLambdicSQLというSQLをラムダでかいちゃおう、というOSSをid:odashinsukeさんと一緒にやってます。いろいろなデータベースに対応する(予定)ですが、とりあえず三人のスキルセットがそろっているSQL Serverを最初にやっています。

github.com

今までは個人でビルドしていましたが、CIやってみようかということで、個人的にVSTSのビルド定義を作ってみました。テストには当然SQL Serverを使うのですが、個人でやるときはそれぞれのSQL Server(LocalDBでもいいはずです)を使えばいいものの、CIとなるとちょっと困る。

接続情報はほかの人には教えたくないこともあり、LambdicSQLではProjectフォルダの下にdb.txtというファイルを作って、接続情報をそのまま平文で書いておくことになっています(もちろんgitignoreには定義済み)。

ではCIのときはどうするか?ということですが、こんな感じでやってます。

f:id:kkamegawa:20170510065239p:plain

まず、普通にVisual Studioのビルドテンプレートを作ります。次にPowerShellのタスクでインラインスクリプト(inline script)を追加します。new-item(別に要らないけど)とadd-contentコマンドレットで、db.txtにSQL Databaseへの接続情報を書いています。

f:id:kkamegawa:20170509055356p:plain

接続情報はそのまま隠すので、variableに独自で文字列を定義して、そのまま書いています。ほんとはタイムアウトとか変更できるように、サーバー名とユーザーID, パスワードだけ隠せばいいんですが。

テストを選別する

とはいえ、毎回すべてのテストが必要なわけでもありません。特にLambdicSQLにはデータベースをcreate/dropするテストもあります。SQL Databaseを作成するたびに2.33円(デフォルトのStandard S0の場合)かかるのはお財布にも優しくありません。

f:id:kkamegawa:20170509071834p:plain

そこでこんな風に、TestCategoryやPriority属性をつけておきます。

f:id:kkamegawa:20170509071833p:plain

テストエクスプローラーで「特徴」を選択するとこんな風にPriority1(CreateDrop以外)とPriority2(CreateDropDatabase)が区別できます。

f:id:kkamegawa:20170510064216p:plain

ビルドのTest AssembliesタスクのTest filter criteriaにPriority=1と指定すると、Priority属性が1のテストだけ実行されます。

Global Azure BootCamp /w OzCode Kansaiを開催しました

Global Azure BootCamp

connpass.com

昨日の話ですが、Global Azure BootCamp /w OzCodeというイベントを開催しました。Global Azure BootCampとは年に一度この時期?に全世界同一日程でAzureのイベントをやろうというものです。今年はたまたまOzCode社の方がワールドツアーで来日されていたので、一緒のイベントとして実施しました。

global.azurebootcamp.net

私も余った時間…というか、時間が押してしまって予定のことがほとんどできませんでした…すいません。資料はこちらに置いています。

当日やるはずだったデモは録画なりフォローアップします。

OzCode

www.oz-code.jp

今回OzCodeのCTOであるOmer氏をはじめ、三名で世界各国を周ってプロモーションを行なっているそうです。日本でも東京、名古屋、大阪で開催されています。今日もう一度東京で実際されるようです。Omer氏自らによる解説は非常にわかりやすかったです。

Omer氏のキャリアは医療機器向けのエンジニアから始まっていて、デバッグに時間がかかっていることから、デバッグは心理学ではないか?と思い始めて、デバッグ拡張機能に注力を始めたそうです。

特に便利そうなのが、Switch〜Caseの分岐予測、パターンマッチにも対応しています。NULL referense発生する場所の色分け(結構困るんですよ)、LINQの対象条件の件数と内容抽出、メンバーをお気に入りにして、そのメンバーのみを専用のウォッチウィンドウに表示とExpressionでのカスタム表示などですね。

半年間有効なフリーライセンスのURLも提供していただいています。共有OKだそうです。一人ずつではなく、オフィスなら5人までだったかな?いいらしいです。

OSS開発者向けには無償で提供してくれるそうです。

www.oz-code.jp

当日の質疑応答から覚えている限りで。

C++/CLIも対応してる?

今の所C# に注力しているので、C#以外の対応は予定にないようです。

グラフィックスを扱っているけど、インラインでイメージデータを表示したい

残念ながらそういう機能はないそうですが、面白いねみたいにおっしゃってました。

メンバーのお気に入りは非常に便利だけど、AというメソッドとBというメソッドで違うメンバーをお気に入りにしたい

ないそうです…残念。

LINQは遅延評価だから、LINQデバッグ時に出ている件数は確定でないのでは?

その通り。そこは意識しておく必要があります。

ソースコードだけしかないプログラムのデバッグをしなければならなくなった、何かいい支援機能がある?

例えば、例外を起こした場合、その変数がどこで使われているか、ヒープから検索することができる。特定の変数であれば、トレースという機能を使って、追跡できます。

C#7みなさん使っていますか?(Omer氏)

OzCodeはC#7にも対応しているので、ValueTuple(英語では「トゥープル」みたいな発音するんですね)、パターンマッチ、outの変数宣言といった、Omer氏が気に入っているC# 7の新機能をOzCode使いながら紹介してくれました。