kkamegawa's weblog

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

Visual Studio Team Services CI/CDアドベントカレンダー:CI/CDまとめ(25日目)

はじめに

これはVisual Studio Team Service アドベントカレンダー25日目の記事です。

qiita.com

なんとか完走できました。というか、これは最後のポエム的なエントリーです。

VSTSとCI/CDについて

VSTSのCI機能は早くからありましたが、CDに関しては、少し後からという感じでしたね。もともとRelease Managementという買収した製品があり、それをTFSに組み込み、さらにはVSTSに持っていくというところから始まったので、最初のリリース機能はおまけみたいなものでした。

だんだんと改良を続けてきて今に至るわけですが、まだまだもっとこうなればいいなーと思うところはあるものの、当初からしたら随分良くなったと思います。

Webへの傾倒

最近のVisual Studio Team Services/Team Foundation Server/Visual Studioのリリースを見ていると、Webへ舵を切っているように見えます。実際、Test ManagerやFeedback Clientはサポートこそされているものの、Visual Studio 2017標準ではインストールされません。

MSの昨今の方針を示すように、クライアントもクロスプラットフォームのために.NETオブジェクトモデルから、REST APIを押しています。もちろん、.NET Coreでもいいのでしょうけど、あのオブジェクトモデルを.NET Coreに移行させるとなると、既存のライブラリ群からの移行が大変そうです。

Python製のVSTS-cliも出てきたし、Web拡張機能を使うにもRESTの方が都合がいいでしょう。これはこれで正しいように思います。

github.com

今後はモバイル用のビューの不足ですね。Work itemなど一部はサポートを始めましたが、まだまだ不足しています。かと言って、そう簡単に作れそうもない気もしますし、必要かと言われれば…うーん。

エージェントについて

CIに使うビルドサーバーを管理したくない、というのはその通りだと思いますが、反面外に出せないライブラリやコンパイラーを使うために独自のエージェントを立てる道が用意されているのはハイブリッドを得意とする、MSらしいなと思います。

ただ、ちょいちょい?と思うことはあります。昨日までは1分で終わるようなソリューションのビルドにある日突然7−8分かかったりとか。今回だいぶビルド無償枠を使ったのですが、この不思議なポーズ(?)現象のおかげで、無為に使われてしまいました。

後、これは致し方ないのですが、スプリント単位でVSのエージェントが更新されるものの、15.5がリリースされるちょっと前に15.4にしました!というのはもうちょっとなんとかならないものかと。

VSのビルドツール類がコンテナーになって、VS Hosted AgentがWindows Server 2016ベースになれば解消するのでしょうか。

ビルド/リリース時のキャッシュ

NuGetパッケージのリストアやDockerコンテナーのpullでもうちょっとキャッシュされないかなぁとは思います。パッケージリストアで1-2分、docker pull も結構早いのですが(特にazure container registry使うと)、他のCIサービスがキャッシュしているように見えるので、この辺の改善もされるといいなとは思います。

Azureいらないようで、実はいる

同じ会社のサービスだから当然と言えば当然なのですが、Azureと一緒に使うとより便利です。パッと思いつく限りで。

  • Application Insights, Monitorなどを使ったリリースゲート
  • Key Vaultを使った機密性の高いデータの格納
  • Azure AD(AAD)を認証に使うとAADのグループがそのままチームになる
  • DevTest Labsと連携してテストエージェントの展開

まだ試せていないですが、VSTSをAzure ADで認証して、クライアントはAzure AD, Azure AD Domain Servicesを使っていると、WinRMのpublicプロファイル問題も解消できるんでしょうかね。

App CenterとVSTSとの住み分け

これどうなるんでしょうね。当面、別々に運用するようですが、当然連携するところもあります。ただ、ビルドするのは間違いなく、App Centerのビルド定義の方が楽ですね。

TestとCI/CD

今回ほとんど紹介できませんでしたが、CI/CD 時にSeleniumなどで自動化テストを行うと言ったことも可能です。

あとは本番前のいわゆるシステムテスト(負荷テストなど)もできますね。機能的にはほとんど変わってないはずなので、昨年のカレンダーを見ていただいてもいいと思います。

今回できなかったところ

ネタとしてはあったんですが、私の検証不足や執筆ペースの都合で諦めたものも結構あります。

  • AWS との連係(拡張機能を入れるだけですが)
  • もっと他にいろんなパターンのデプロイ
    • LogicApp / Functions
    • Hadoopなど
    • AWS(Lambda/S3/EC2)
    • Cognitive系
    • データベース上級編
    • 大規模並列デプロイ
    • JavaやJavaScript, PHP, Pythonなどの他プラットフォーム
  • Docker(これはちょっとハマり中)
  • VSTSビルドタスクを作ってみる
  • Release Gateの他のパターン
  • モバイル開発(Xamarin, Swift, Kotlinなどバックエンドを含めて)

TFS本と並行してできればと思っています。

終わりに

今年もカレンダーなんとか完走できました!読んでくれて、ちょっとでもVSTSに興味を持ってもらえれば嬉しいです。

来年は他に書く人がいそうだったらやりましょう。