kkamegawa's weblog

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

Visual Studio Team ServiesのREST APIを使ってみる(24日目)

はじめに

今日はちょっと趣向を変えて、VSTSのREST APIを使う方法を紹介します。C#で作ってもいいのですが、今日はPowerShell AdventCalendarと相乗りカレンダーということで、PowerShellで使う方法を紹介します。

私が毎回紹介しているVSTSの翻訳はVSTSにmarkdownの下書きを書いていて、出来上がったらGistに送っています。いいかげん自動化しようと思っていたので、ちょうどいい機会なのでやってみます。どっちかといえば、Gistへの更新のほうが悩みました…。ちなみに、Gistへの登録であれば、PSGistというモジュールがScript Gallaryに公開されています。

www.powershellgallery.com

最初はこれを使おうと思ったのですが、GitHubのパスワードをOSの資格情報マネージャーに記録する方法だったので、残念ながら自動化(Hosted AgentでのCI)には使えません。そのうちforkして改造しようかと思います。

PowerShellからGitHubへのアクセスを解説している動画がChannel9にあるので、こちらもみてください。

channel9.msdn.com

今回はパスワードでの認証ではなく、PATを使うので、PowerShellからGist(GitHub)にアクセスするためのPATを取ります。動画中でも解説されているので、詳しくは省きますが、Gistの権限があればいいはずです。

VSTSのファイルをコミット履歴から取得する

www.visualstudio.com

VSTSのHosted Agentでアクセスするために認証にはPATを使いましょう。最長で1年ですので、忘れたころに更新することになりそうですが。

www.visualstudio.com

  1. 直近のコミットを取得する
  2. コミットの詳細情報を取得する
  3. 変更されたファイルを取得する

という流れになります。3番目の手順で変更一覧が取得できるので、そのitem.pathプロパティにファイル名が入っています。ファイル名をGist側と突き合わせます。

www.visualstudio.com

実はここから時間切れでできてないのですが、指定したファイルをoctect/streamで取得して、gistにアップロードします。

Gistの取得

Gistの取得は簡単です。指定ユーザーのGistを取ってくるAPIたたくだけでいいのですが、ファイルがあるかどうか探すのはちょっと面倒。

Gistの一覧にはFilesコレクションがあり、各ファイルがいわゆるハッシュのキーになっています。なので、Filesコレクションの各ファイルオブジェクト($gistfileオブジェクトに入っているとします)のNotePropertyを取得することでGistのファイル名を取得します。

$gistfile | Get-Member -MemberType NoteProperty | select Name

VSTSのコミット履歴(changeTypeプロパティ)がaddであれば、追加。"edit"であれば、編集となっています。この辺は私の使い方ではaddしかない(masterブランチへのpull requestで追加のみ)はずなので、どうしようかなーと思っているところです。

途中段階のソース

とりあえず上記のフローで書きなぐったのが以下のソースです。あとは判定のテストと、ファイルアップロードができればいいので、お正月中に何とかしようと思っていますw。

RESTあまり使っていなかったのですが、便利ですね。VSTSもこれからはREST APIが強化されるでしょうから使ってみてください。

Copy from VSTS Git Repository to public Gist. It d ...

Visual Studio Team Servicesで単体テストの品質管理をする(23日目)

VSTSで実行する単体テスト

.NET CoreとVSTS

いろいろ調べてみたのですが、残念ながら現在VSTSのHosted Agentは1.0 preview2(3131)なので、VS2015ベースの.NET Core 1.0.0のみサポートです。

  • VS 2017は.NET Core 1.1(Tooling Preview4)なので、Hosted agentではビルドできない
  • VS 2017と.NET Core 1.1を入れてしまうとVS2015で.NET Core 1.0ベースのものが作れなくなってしまう(少なくとも私の環境では)
  • 今のところ.NET Coreアプリのコードカバレッジや単体テストの集計は取れてない…

ということで、この手順を実施するなら、フル.NETアプリケーションでやってください。

ASP.NETプロジェクトのビルドテンプレート

f:id:kkamegawa:20161223214908p:plain

以前はVisual Studioというテンプレートしかなかったのですが、今ではASP.NET Build(Preview)というテンプレートが用意されています。ほとんどVisual Studioと変わらないのですが、webdeployを使ったデプロイタスクが登録されているところが変わります。

はっきり言ってめんどくさい手順だったので、用意してくれるに越したことはありません。

注意点として、Visual Studio TestタスクのOverride Testrun Parametersで/logger:trx /UseVsixExtensions:trueを指定してください。

Code Coverageをチェックすると、コードカバレッジ情報が生成されます。

単体テストと品質履歴

f:id:kkamegawa:20161223214907p:plain

単体テストを有効にしていると、このようにSummaryで単体テストと、コードカバレッジの結果が表示されます。

f:id:kkamegawa:20161223220939p:plain

コードカバレッジに関しては、"Download Codecoverage Results"でダウンロードすると、Visual Studioで表示されるコードカバレッジと全く同じ結果が確認できます。

より詳細に見たい場合はSonarQubeなどを使うといいでしょう。C#であればプラグインは無償です(VB/VB.NETは有償)。

単体テストエラー発生時

f:id:kkamegawa:20161223214912p:plain

一か所コントローラーの単体テストがわざと通らないような変更をコミットします。

f:id:kkamegawa:20161223214909p:plain

当然ビルドが失敗します。

f:id:kkamegawa:20161223214910p:plain

Test詳細ページで、具体的にどのテストが失敗したのか、何パーセントくらい失敗したか、確認できます。

f:id:kkamegawa:20161223214911p:plain

先日、ダッシュボードにBuild状態を表示するタブを作りましたが、今回のようにテストが失敗すると、このように品質グラフや、デプロイの成功/失敗も一目でわかるようになります。

VSTSのダッシュボードはロールや自分たちの関心毎に作るのがいいように思います。

まとめといいわけ

ほんとはこの話はもっと前にやるはずだったのですが、.NET Core + VS2017プロジェクトのHosted Buildがどうしてもうまくいかず、いろいろ調べたらやっぱりだめそうというのがわかり、今日まで引っ張ってしまいました(反省)。

もう少し紹介したいことがありますが、それは25日超えてからにします。

明日はPowerShellアドベントカレンダーとの相乗りで一つ紹介します。

Visual Studio Team Servicesの外部サービス連携を使う-Teams編(22日目)

はじめに

VSTSには外部のWebサービスと連携する機能があります。イベントとしては多くないのですが、いろいろな通知が一か所にまとめられるといいものです。そんなサービス連携を紹介します。

Teamsとの連携

Microsoft Teams – グループ チャット ソフトウェア

TeamsはMSが先日からOffice 365サービスの1つとして提供している要はSlackやHipChat, ChatWorkみたいなやつです。Office 365のひとつなので、同じアカウントを共有するVSTSとの連携は結構楽です。ちょっとやってみましょう。

Teamsの設定に関しては省略します。

f:id:kkamegawa:20161222055522p:plain

Teamsで通知用のチャネルを作っておいて、そのチャネルにVisual Studio Team Servicesのコネクタを追加します。

f:id:kkamegawa:20161222055524p:plain

使用するアカウントおよび、VSTSのテナント名を指定します。既定ではデフォルトのMSアカウントになっているかもしれないので、気を付けてください。現時点において、MSアカウントを連携に使用することはできません。必ずOffice 365のアカウントを使ってください。

f:id:kkamegawa:20161222055523p:plain

いつも通りアプリケーションの承認します。いつでもVSTS側で取り消しできます。

f:id:kkamegawa:20161222055525p:plain

Teamsへの通知を指定します。ビルドやリリース、作業項目とかありますね。訳語がいまいち統一されていない(作業アイテムと作業項目など)のはスルーで。

f:id:kkamegawa:20161222055526p:plain

区分と種類がありますが、ここでは全部通知させます。大きなチームになったら、VSTSのチームごとに通知とかにしましょう。VSTSでチームを作った場合、区分パスがそのままAreaに該当しているので、わかりやすいはずです。

kkamegawa.hatenablog.jp

チームに関してはこちらをどうぞ。

f:id:kkamegawa:20161222055527p:plain

VSTSでWork Itemを作るとこのように通知されました。

f:id:kkamegawa:20161222055528p:plain

チャネルへの通知は複数設定できます。同様にビルドが完了した通知を設定してみましょう(大体同じなので省略)。

f:id:kkamegawa:20161222055531p:plain

こんな風にビルド完了通知がきます。

VSTSのService Hook

実はこの機能、TeamsがVSTSへのService Hookに登録することで実現しています。VSTSから外部サービスへの登録もできるのですが、office 365関係のサービスの場合、Office 365から操作することが前提になっています。VSTSからOffice 365のService Hookはしないでください(やろうとしてもエラーになります)。

f:id:kkamegawa:20161222055529p:plain

こんな感じで、Office 365のWeb Hookが追加されています。ここから編集できそうな気がしますが、絶対に編集しないでください。削除する場合は必ずTeams側から実施します。

これはほかのOffice 365サービスのFlowを使う場合でも同じです。ちなみにFlowの場合はMSアカウントのVSTSのサービス呼び出しができるんですよね。はやくTeamsもサポートしてほしいものです。

f:id:kkamegawa:20161222055530p:plain

Teams以外にもSlackやHipChatへの通知も標準で提供されています。ChatWorksはないようですが、Web Hookが提供されているので、それでやればいいんじゃないでしょうか。

まとめ

というわけで、VSTSの通知機能の紹介でした。Slack一強みたいな感じでしたけど、Teamsこれからどうなるんでしょうね。標準でOffice 365のアカウント連携して使えるのは非常に便利なので、Office 365ユーザーには受けそうです。

VSTSのAPIもartifactへのアクセス手段とかもうちょっとあればいいんですが(ないですよね…)。

www.visualstudio.com

Visual Studio Team ServicesのデータをPower BIで可視化する(21日目)

はじめに

VSTSのデータを可視化して一括で見たいという話はよくあります。そういうときのためにVSTSはPower BIでデータを抜き取って表示できます。Power BIはVSTSだけではなく、GitHubやほかのデータソースにもアクセスできます。MSDNを持っていれば有償のProが使えます。

blogs.msdn.microsoft.com

powerbi.microsoft.com

Power BIのサインアップについては省略します。

データを取得

f:id:kkamegawa:20161221055538p:plain

データを取得から「サービス」の「取得」をクリック。 f:id:kkamegawa:20161221055539p:plain

Visual Studio Team Servicesがあるので、「入手する」

f:id:kkamegawa:20161221055540p:plain

接続先のアカウントは hoge.visualstudio.com であれば、hoge だけ入力します。Project名は * を入れれば全プロジェクトが対象になりますが、推奨されていません。見たいプロジェクトだけを指定します。

f:id:kkamegawa:20161221055541p:plain

OAuth2で認証します。

f:id:kkamegawa:20161221055542p:plain

アプリケーションの承認でVSTSへのアクセスを許可します。ちなみにMSアカウントで承認する場合、たまにデータの同期がとれなくなるようなので、見えなくなったら作り直したほうがいいようです。今回はどちらも同じ組織アカウントでやってるのでたぶん大丈夫の…はず。

f:id:kkamegawa:20161221055543p:plain

データのインポートにはしばらく時間がかかります。終了後、初期データが見えます。ぼっちプロジェクトなので寂しいですw。

f:id:kkamegawa:20161221055544p:plain

レポートでは各種の状態のレポートがタブになっています。ここではOpen状態のバグデータですね。

f:id:kkamegawa:20161221055545p:plain

Scrumプロジェクトテンプレートで作っているので、Scrum Sprint Statusにもデータが入っています。AgileやCMMIタブには何も入っていないので、消してもいいでしょう。

f:id:kkamegawa:20161221055546p:plain

Gitのコミット状態も見えます。TFVCで作っている場合、Team Foundation Version Controlタブで同様のデータが見えます。

f:id:kkamegawa:20161221055547p:plain

Power BIサイトで見るのもいいですが、外部のWebページやVSTSのダッシュボードで見たいところですよね。「Webに公開」で埋め込み用のリンクが作成できます。

f:id:kkamegawa:20161221055548p:plain

埋め込み用のコードを使う場合、プライベートなデータが意図せず漏れることになるので注意してください。今回の場合、プライベートであるVSTSに埋め込むので基本問題はありません。

f:id:kkamegawa:20161221055549p:plain

ダッシュボードに昨日紹介した方法でPower BIというタブを作り、そこにhtmlウィジェットでPower BIのリンクを貼り付けます。iframeなどのhtmlタグは不要で、httpのリンクのみ指定します。

f:id:kkamegawa:20161221055550p:plain

で、こんな風にVSTSにPower BIのデータが貼りつきます。簡単ですね!

作業項目でチャートを見る

作業項目に関してはWorkタブの中の各種クエリ結果をグラフで確認できます。

f:id:kkamegawa:20161221065908p:plain

今回の場合Assigned to meのNew Chartから

f:id:kkamegawa:20161221065909p:plain

Work Itemの種類を円グラフに。

f:id:kkamegawa:20161221065910p:plain

棒グラフにしてみました。

まとめ

Power BIのコンテンツパック、実は更新されていないようで、例えば新しいビルドシステムやRelease Managementの状態が見えません。オンプレミスのTFSであればSQL Serverなので、どうにでもなる(最悪Power BIにみせればいい)のですが、VSTSの場合コンテンツパックを更新してくれないとどうしようもありません。

usersvoiceで言ってみてください(英語)。私からもちょっと聞いてみようとは思っています。