BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (3/4)

今回は、Zip デプロイ・Run From Package の CI/CD パイプラインを作ります。具体的には、Azure DevOps 上で Build Pipelines と Release Pipelines を構築します。
以前の回で作成した Azure Functions V2 のプロジェクトを使ってやります。

パイプラインを構築は、Build と Release に分けて作ります。



ソースのプロジェクトは、前回作成したものを引き続き使います。

以前の回で VSや CLI を使った Run From Packge を書いてきました通り、zip の配置先は、現時点だと2つの観点があります。

  • ローカル: Azure Functions のホストの D:\home\site\wwwroot に zip を配置
  • リモート: Blob Storage に zip を配置

これに応じて Release パイプラインの作り方も異なります。今回はローカルへの配置のパイプライン、次回はリモート= Blob への配置をやります。

Azure Repos にソースを Push

Build パイプラインを作るなら、ソースを引っ張ってこれる場所に置きましょうか。GItHub でもよいのですがせっかくなので Azure DevOps の Repos にソースを Push しておきました。ソースは初回に作ったものです。手順は完全に割愛します。


Build Pipeline の作成

Azure DevOps の左側のメニューの Pipelines またはその下の Builds をクリック > New > New build pipeline をクリックします。

f:id:beachside:20181221110545p:plain


Preview Features で「New YAML pipeline creation experience」を利用していると、YAML で進むUIになっています。YAML で書ける方はそれで進んでいけばよいです。今回は visual designer を利用して進みますので、以下図のように「Use the visual designer」をクリックします。ちなみに visual designer で作った後に YAML に出力もできます。

f:id:beachside:20190117210141p:plain


ソースの設定をします。
自身でパイプラインを組むリポジトリーやブランチを選択して「Continue」をクリックします。

f:id:beachside:20181221110846p:plain


次はビルドのテンプレートの設定です。
今回のソースは ASP.NET Core ベースの Azure Functions なので「ASP.NET Core」を選択(Applyボタンクリック)します。

f:id:beachside:20181221111124p:plain


Pipeline の設定を行います(画面左側で Pipeline を選んだ状態)。ここの設定は部分的に後続の Agent Job にも反映されます。

  • Name:
    適当にわかりやすい名称にします。
  • Agent pool:
    Build のエージェントを選択します。Ubuntu や MacOS もあります。状況に合わせて適切なものを選択します。
  • Parameters
    ビルドするプロジェクトやテストプロジェクトを選択します。ソリューションの中に複数プロジェクトがある場合はどのプロジェクトか指定が必要ですね。今回はFunctions25 のプロジェクトのみを選択しています。ワイルドカードも使えるので、テストプロジェクトが複数あるときも大丈夫です。

f:id:beachside:20181221120618p:plain


Agent Jobとして「Restore」「Build」「Test」「Publish」「Publish Artifact」がありますが、今回は「Publish」を変更するだけで事足ります。

下図のように、左側にある Job から「Publish」をクリックし、「publish WebProject」の チェックを外します 。その下の方にある「Zip Published Projects」チェックオンも大事ですが、デフォルトでチェックがオンになっていますね。

f:id:beachside:20181221121520p:plain


初めて設定する場合は、他にどんな設定ができるのか見ておくべきかなーと思います。

Build Pipeline の実行

画面上部の「Save & queue」を実行すると、設定を保存して、手動でビルドを実行できます。クリックしてみます。

f:id:beachside:20181221121916p:plain


以下のようなダイアログが出てくるので、適当に入力(または何も入力せず)「Save & queue」をクリックするとビルドが実行されます。

f:id:beachside:20181221140012p:plain


Build Pipeline の画面の上部に Build ID が表示されていますので、クリックするとリアルタイムな動作のログが見れます。

f:id:beachside:20181221140234p:plain

Build の一覧から Build ごとのログを確認することもできます。


Release Pipeline の作成(Functions のローカルへZipデプロイ編)

ここでは、Build パイプラインで作成した Artifact である zip のパッケージを Azure Functions のリソースの D:\home\site\wwwroot に配置します。これはサクッとできます。

Task の設定

まず、画面左側のメニューの Pipelines の中にある「Release」をクリック > 「New」 をクリック > 「New Release pipeline」をクリックします。

f:id:beachside:20181221141515p:plain


テンプレートの選択をします。「App Service deployment」を選びましょう。

f:id:beachside:20181221141919p:plain


画面右側の Stage の名前は何をするのかわかりやすい名称を入力します。次に、画面中央あたりの「1job, 1task」をクリックします。

f:id:beachside:20181221141913p:plain


リリースパイプラインの設定を行っていきます。画面の項目を適切に入力しましょう。

  • *Azure subscription:** デプロイする Azure のサブスクリプションを選択します。選択できない場合、なんらかの権限が足りないというよくあるある問題です。

  • App type: 「Function App」を選択します。

  • App service name: デプロイ先の Function App を選択います。

f:id:beachside:20181221142913p:plain


次は、「Deploy Azure App Service」をクリックします。注意すべき設定は以下2点です。

  • Version: 「4.*」を選択します。現時点ではプレビューです。
  • Additional Deployment Options:
    • Select deployment method: チェックをオン
    • Deployment method: Run From Package を選択

また、アプリケーション設定の環境変数の設定もできます。Application and Configuration Settings > App settings で以下のように値を入れると、Run From Package に必要な環境変数を設定できます。

-WEBSITE_RUN_FROM_PACKAGE 1

ついでに画面上部の「New release pipeline」もわかりやすい名前に変えるとよいでしょう。今回は「App25 Run From Package (local)」にしました。

f:id:beachside:20181221143816p:plain


Artifact の設定

リリースパイプラインの画面上部の「Pipeline」をクリック > 「Add an Artifact」をクリックします。

f:id:beachside:20181221144130p:plain


Artifact の設定です。今回は、Build の後に続く想定なので、Source type は「Build」にしました。
Default version は、ここではシンプルなものを選択していますが、他のを選択することで一般的にありそうなことCIは実現できると思います。必要に応じて見てみるとよいと思います。 設定したら「Add」をクリックします。

f:id:beachside:20181221145127p:plain


トリガーの設定

トリガーは、下図の赤丸の2箇所から設定できます。ここも一般的な CI のトリガーが用意されているので用途にあわせて設定してみるとよいです。

f:id:beachside:20181221145432p:plain


Releaseを実行してみます。Releases の一覧に戻って 先ほどセットアップした「App25 Run From Package(local)」を選択 >「Create a release」をクリックします。

f:id:beachside:20181221150842p:plain


他の設定次第で多少設定が変わる(?)ので、設定は内容を読んでやりましょう。手動で試すだけならさほど気にする要素はないですが。

f:id:beachside:20181221151440p:plain


Releases の一覧で実行した Release のログを確認することができます。今回のパイプラインなら、Azure Functions の D:\home\data\SitePackages に zip が格納されることが確認できるでしょう。



長くなった.... 次回は、Blob へ zip を置くやつです。

beachside.hatenablog.com