kkamegawa's weblog

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

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使いながら紹介してくれました。

BuriKaigi 2017 in Toyamaでぶりを食べ…しゃべってきました

toyama-eng.connpass.com

一度は行ってみたかったブリ会議 in Toyama、今回やっと念願かなって参加できました。いろいろなセッションがあり、ブリおいしかった…もとい、とても楽しかったです。

私の発表資料はこちら。かなりぎりぎりまで内容悩んでいたのですが、最後はちょっと前にあったウメハラ氏の講演がいいな、と思って、引用させていただきました。ブリだけに出世魚をということもあって、一日ひとつ強くなろう、に通じるものがあります。

はじめて北陸C#erによるドキドキライブコーディングを見たのですが、「小島さんずるい」というのがよくわかりました。もう勝つためなら何でもやるみたいな。なんで二人が作ったオセロ対戦の思考ルーチンでstackoverflow exceptionが起きるんだよw。

そして最初にばらばらで作った思考ロジックを結合するとコンパイルできないっていったい…。普通依存関係なんかないからコンパイルできないことなんてないのに。お互いの思考ロジックがお互いの思考ロジックに(なぜか)依存していたからコンパイルできなくなっているという…ひどい…私はピュアなので、そんなこと思いつかないよw。

C#のコーディング力を競うのではなく、「相手が何やろうとするか読みあう」という別のゲームになっていましたが、最後は石野さんが貫録のロジックで勝利していました。とても面白かったです。

また来年も開催されるようなら都合つけて参加したいものです。

Visual Studio Team ServicesとAzure App Servicesの継続的デプロイメント(29日目)

はじめに

Azure App Servivesには二つデプロイ方法が用意されています。現在プレビューの継続的配信昨日はVSTS側に設定を行います。

更新のお知らせ

この記事のタスクはproject.jsonを使う古い.NET Core 1.0ベース(VS2015といってもいい)のやり方になっています。VS2017を使うやり方は別途書きましたので、そちらをみてください。

kkamegawa.hatenablog.jp

デプロイオプション

f:id:kkamegawa:20170108160044p:plain

今まであった、デプロイオプションはこんな感じで作れます。これはGitリポジトリのみサポートのようでGitリポジトリにコミットがあれば自動的にAzure App Services側にデプロイされます。

一切処理がない、静的コンテンツを配置するときに便利だと思います。VSTSのHosted Agentのビルド時間を消費しないのでお得です。

Azureの継続的配信(プレビュー)

f:id:kkamegawa:20170108160045p:plain

しかし、ASP.NET(Core)のデプロイするときは困るためかどうか知りませんが、継続的配信という機能が追加されました。Configureをクリックすると、設定が始まります。

f:id:kkamegawa:20170108160046p:plain

ソースリポジトリ、プロジェクト、ブランチを選択します。

f:id:kkamegawa:20170108160047p:plain

ASP.NETかASP.NET Coreかを選択します。注意点として、現時点においてVSTSのHosted AgentはASP.NET Core 1.1に対応していないので、1.0のプロジェクトである必要があります。

f:id:kkamegawa:20170108160048p:plain

負荷テストとApp Servicesのデプロイメントスロットを使っている場合はここで指定できます。

f:id:kkamegawa:20170108160049p:plain

これで完了です。左からリンクをクリックするとVSTS側のビルド定義の確認、リリース定義の確認、ビルド実行となります。

VSTS側の設定

f:id:kkamegawa:20170108181358p:plain

Azure側で作成した継続的配信はVSTS側でこんな風に既定のビルド定義が作成されます。TriggersタブにContinuous integrationオプションが設定されているので、リポジトリにコミットされるとAzure側へのデプロイが行われます。

f:id:kkamegawa:20170108160051p:plain

デプロイも設定されています。つまり、ビルド→リリースが自動的に行われます。Hosted Agentの時間もそれだけ使われます。

不要になった場合

不要になった場合、以下の手順で削除します。

  1. Azureポータルの継続的配信のdisconnectをクリックして削除する。
  2. VSTS側のリリース定義を削除する
  3. VSTS側のビルド定義を削除する

まとめ

Azureにデプロイする場合、VSTSからビルド定義を作るとちょっと手順が多いですが、Azure側から作成すると簡単にできますね。