kkamegawa's weblog

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

VSTSでASP.NET CoreアプリのCI/CDを行う

はじめに

以前、VSTSとAzure App ServivesのCI/CDの話を書きました。

kkamegawa.hatenablog.jp

今はちょっとやり方が変わっているので、改めて紹介します。VSTSで書いていますが、基本はJenkinsやTFSでも変わりありません。

Build定義作成

VSTSのビルドテンプレートからVisual StudioもしくはASP.NET(Preview)を選んでください。

f:id:kkamegawa:20170505133249p:plain

dotnet restoreコマンドでもいいのですが、せっかくテンプレートに入っているNugetタスクを使います。重要なポイントとして、必ず、3.5以上を選択してください。ここでは4.0にしています。

NuGet 4.0はHosted VS2017であれば入っています。

f:id:kkamegawa:20170505133251p:plain

Visual Studioタスクで使用するVisual Studioを必ずVisual Studio 2017にします。

f:id:kkamegawa:20170505133218p:plain

Azure App Serviceへのデプロイにwebdeployを使うので、dotnet publishコマンドを使用します。引数に以下の値を指定します。

publish -c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory)

これで、ビルド構成(Release, Debugなど)でビルドした結果を -o で指定された出力先にコピーします。ArtifactStagingDirectoryでエージェントの中間生成領域です。

f:id:kkamegawa:20170505133220p:plain

WebDeployはzipファイルなので、ArtifactStagingDirectoryに出力した内容をzipファイルに圧縮します。

f:id:kkamegawa:20170505133221p:plain

生成されたzipファイルをリリース機能でデプロイするための領域にコピーします。

f:id:kkamegawa:20170505133225p:plain

Optionsの中にあるAgentsで必ずHosted VS2017を選んでください。これで準備完了です。

Release機能を使う

f:id:kkamegawa:20170505133223p:plain

リリース定義を作成し、App Serviceへのリリース用の環境を作ります。ここではJapan Westを作りました。

注意点として、Stagingスロットを作っていない場合、一度App Serviceをstopで止めてから入れ替えしないといけないようです。確かこれはASP.NET Coreのissueにも挙がっていた気がします。

止めて、デプロイしてから再度startタスクを実行します。容量にもよりますが、それなりに時間がかかるので、Staging作ってswapさせたほうがいいように思います。

成果物の受け渡しに関しては、以前の記事などを参照してください。

Visual Studio Team Services 2017/4/19の更新

VSTSの4/19のSprint 116(のはず)のリリースノートの参考訳を作ってみました。オリジナルはこちらから読んでください。

www.visualstudio.com

Gitのコミットグラフ、node.jsの複数バージョンの検証、ログの強化、iOS/Google Playへのリリース機能強化、拡張機能をリリースしている人にはダッシュボードの強化となかなか便利そうなものがそろっています。Gitのコミットグラフは私のテナントにも来ていたので、使ってみましたが、なかなかみやすくなっています。

ではまた三週間後。

translate to Japanese to VSTS release notes from h …

VSTS/TFSで並列リリースを行う

www.visualstudio.com

VSTSにはビルドとリリース機能があり、それぞれ継続的インテグレーションと継続的デリバリーを支援します。これらにはMSが提供するエージェント(Hosted Agent)と自前で用意するエージェント(Private Agent)の二種類があります。

エージェントはそれぞれキューと呼ばれる単位で実行が制御されます。一つのキューに対して一つのジョブしか投入できません。

www.visualstudio.com

このページ内の図がわかりやすいですかね。そして同時に投入できるキューはライセンスで制限されています。Build and ReleaseのResource limitsで確認できます。

f:id:kkamegawa:20170425064708p:plain

初期状態では一つのパイプラインのみ使用できます。追加する場合、Marketplaceで購入します(Changeをクリック)。Marketplaceで購入できますが、MSDNの場合、サブスクリプションの上限解除を設定しないと購入できないので、注意してください。請求はAzureにまとめられます。

Office 365やAzureを組織で導入していて、既存のVSTSのサブスクリプションの支払いをOffice 365の組織アカウントに変更したいという場合、やや大変な手順で変更しないといけないので、注意してください。

www.visualstudio.com

パイプラインが2以上になると並列デプロイができるようになりますので、ここではVSTSが提供しているHosted/Hosted VS2017/Hosted Linuxを使ってやってみましょう。まず、Azure Web Appを複数のリージョンに作成しておきます。エージェントを切り替えるには"Run on agent"をクリックします(ここちょっとわかりづらい)。

f:id:kkamegawa:20170425064705p:plain

Japan EastへのデプロイにはHotedを選択します。

f:id:kkamegawa:20170425064706p:plain

Japan WestへのデプロイにはHosted VS2017を選択しています。

f:id:kkamegawa:20170425064707p:plain

Create Releaseを実行すると並列でのリリースが開始されます(IN PROGRESSになってます)。

f:id:kkamegawa:20170425064709p:plain

終わるとこんな感じ。一つFAILEDになってますが、それはHosted Linuxエージェント使ったからです(.NET Coreアプリなんでできると思ったけど甘かった)。

f:id:kkamegawa:20170426065305p:plain

ちなみにオンプレミスのTFSでも(リリースのUIはちょっと違いますが)大体同じです。こちらはVisual Studio Enterprise保有者の数および、VSTSと同様にMarketplaceで購入した数が上限になります。

…というデモをこの前のGlobal Azure Bootcamp @ Kansaiでやりたかったんです(時間切れ)。

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