しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

de:code 2017 で App Service on Linux について話しました

久し振りに de:code で話をしてきました。周りの人からはアニメタイトルセッションと茶化されましたが、ちゃんと意味があって付けているのです。多分。

f:id:shiba-yan:20170525005825j:plain

おかげさまで、今回は前回よりも広い部屋が割り当てられ、想像以上の大勢の方に参加していただくことが出来ました。App Service on Linux について知ってもらえたなら幸いです。

危うく私のセッションによって、デプロイ優先順位が左右される展開になるとこでした。

まだプレビューのサービスなので、当日までいろいろとアップデートがあるのではないかとか、スピーカー控室のネット回線が不調でテザリングをする羽目になったとかいろいろありますが、当日のデモは全て上手くいきました。App Service Plan から作成したので、少し時間はかかりましたが。

今回のセッションはシャッター音の鳴るカメラは禁止と最初にアナウンスした関係で、使用したスライドを既に docs.com で公開しています。不要なページは削除してますが、内容は同一です。

最後のデモでは GitHub でホストしているリポジトリに対して CircleCI で Docker Image をビルドし、App Service on Linux に自動デプロイする処理を 4,5 分で構築しました。

自動化してこそクラウドを使うメリットが出てくるというものです。

基本的な流れは以前に書いたエントリと変わってはいないですが、CircleCI 2.0 に切り替えたのと ASP.NET Core アプリのビルドと Azure CLI の実行に Docker を使いました。

デモで使用した circle.yml は以下のようになってます。もう少し最適化は出来ると思いますが、まずは動くものを作ってからの方が良いでしょう。

version: 2
executorType: machine
stages:
  build:
    workDir: ~/app
    steps:
      - type: checkout
      - type: shell
        name: Build Application
        command: docker run -it -v $(pwd):/app --workdir /app microsoft/aspnetcore-build:1.1.2 bash -c "dotnet restore && dotnet publish -c Release -o ../publish/app"
      - type: shell
        name: Build Docker Image
        command: docker build --rm=false -t shibayan/decode-demo:v$CIRCLE_BUILD_NUM ./publish/app
      - type: shell
        name: Run Test
        command: |
          docker run -d -p 8080:80 shibayan/decode-demo:v$CIRCLE_BUILD_NUM
          sleep 5
          curl --retry 10 --retry-delay 5 -v http://127.0.0.1:8080
      - type: deploy
        name: Push to Docker Hub
        command: |
          docker login -u $DOCKER_USER -p $DOCKER_PASS
          docker push shibayan/decode-demo:v$CIRCLE_BUILD_NUM
      - type: deploy
        name: Deploy to App Service
        command: |
          docker run -it azuresdk/azure-cli-python bash -c "az login --service-principal -u $AZURE_USER -p $AZURE_PASS --tenant $AZURE_TENANT && az webapp config container set -c shibayan/decode-demo:v$CIRCLE_BUILD_NUM -n WEBAPP -g RESOURCEGROUP"

2.0 向けのドキュメントは以下のページにまとまっています。まだベータですが使う価値はあります。

CircleCI 2.0 になって CI での各ステップを独自に定義できるようになり、記述が格段にわかりやすくなりました。今回は Docker Image のビルドが必要だったので executorType として machine を指定しましたが、docker を使うと CI の実行に使うイメージを指定できるようになり、更に便利です。

App Service on Linux は今年中には GA するという話もあるので、目が離せませんね。