今回は、Zip デプロイ・Run From Package の CI/CD パイプラインを作ります。具体的には、Azure DevOps 上で Build Pipelines と Release Pipelines を構築します。
以前の回で作成した Azure Functions V2 のプロジェクトを使ってやります。
パイプラインを構築は、Build と Release に分けて作ります。
- Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (1/4)
- Run From Package とは
- Azure Functions V2 (C#) のサンプルアプリ作成
- Visual Studio から Zip デプロイ、Run From Package
- Run From Package の設定と Zip デプロイの動作
Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (2/4)
- Azure Function Core Tools の CLI
- CLI で Blob への Zip デプロイ
Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (3/4) : 今回!
Azure Function V2 (C#) で Run From Package の CICD と Azure DevOps (4/4)
- Release Pipeline の作成: リモート (Blob) へ zip デプロイ編
ソースのプロジェクトは、前回作成したものを引き続き使います。
以前の回で 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 をクリックします。
Preview Features で「New YAML pipeline creation experience」を利用していると、YAML で進むUIになっています。YAML で書ける方はそれで進んでいけばよいです。今回は visual designer を利用して進みますので、以下図のように「Use the visual designer」をクリックします。ちなみに visual designer で作った後に YAML に出力もできます。
ソースの設定をします。
自身でパイプラインを組むリポジトリーやブランチを選択して「Continue」をクリックします。
次はビルドのテンプレートの設定です。
今回のソースは ASP.NET Core ベースの Azure Functions なので「ASP.NET Core」を選択(Applyボタンクリック)します。
Pipeline の設定を行います(画面左側で Pipeline を選んだ状態)。ここの設定は部分的に後続の Agent Job にも反映されます。
- Name:
適当にわかりやすい名称にします。 - Agent pool:
Build のエージェントを選択します。Ubuntu や MacOS もあります。状況に合わせて適切なものを選択します。 - Parameters
ビルドするプロジェクトやテストプロジェクトを選択します。ソリューションの中に複数プロジェクトがある場合はどのプロジェクトか指定が必要ですね。今回はFunctions25 のプロジェクトのみを選択しています。ワイルドカードも使えるので、テストプロジェクトが複数あるときも大丈夫です。
Agent Jobとして「Restore」「Build」「Test」「Publish」「Publish Artifact」がありますが、今回は「Publish」を変更するだけで事足ります。
下図のように、左側にある Job から「Publish」をクリックし、「publish WebProject」の チェックを外します 。その下の方にある「Zip Published Projects」チェックオンも大事ですが、デフォルトでチェックがオンになっていますね。
初めて設定する場合は、他にどんな設定ができるのか見ておくべきかなーと思います。
Build Pipeline の実行
画面上部の「Save & queue」を実行すると、設定を保存して、手動でビルドを実行できます。クリックしてみます。
以下のようなダイアログが出てくるので、適当に入力(または何も入力せず)「Save & queue」をクリックするとビルドが実行されます。
Build Pipeline の画面の上部に Build ID が表示されていますので、クリックするとリアルタイムな動作のログが見れます。
Build の一覧から Build ごとのログを確認することもできます。
Release Pipeline の作成(Functions のローカルへZipデプロイ編)
ここでは、Build パイプラインで作成した Artifact である zip のパッケージを Azure Functions のリソースの D:\home\site\wwwroot
に配置します。これはサクッとできます。
Task の設定
まず、画面左側のメニューの Pipelines の中にある「Release」をクリック > 「New」 をクリック > 「New Release pipeline」をクリックします。
テンプレートの選択をします。「App Service deployment」を選びましょう。
画面右側の Stage の名前は何をするのかわかりやすい名称を入力します。次に、画面中央あたりの「1job, 1task」をクリックします。
リリースパイプラインの設定を行っていきます。画面の項目を適切に入力しましょう。
*Azure subscription:** デプロイする Azure のサブスクリプションを選択します。選択できない場合、なんらかの権限が足りないというよくあるある問題です。
App type: 「Function App」を選択します。
- App service name: デプロイ先の Function App を選択います。
次は、「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)」にしました。
Artifact の設定
リリースパイプラインの画面上部の「Pipeline」をクリック > 「Add an Artifact」をクリックします。
Artifact の設定です。今回は、Build の後に続く想定なので、Source type は「Build」にしました。
Default version は、ここではシンプルなものを選択していますが、他のを選択することで一般的にありそうなことCIは実現できると思います。必要に応じて見てみるとよいと思います。
設定したら「Add」をクリックします。
トリガーの設定
トリガーは、下図の赤丸の2箇所から設定できます。ここも一般的な CI のトリガーが用意されているので用途にあわせて設定してみるとよいです。
Releaseを実行してみます。Releases の一覧に戻って 先ほどセットアップした「App25 Run From Package(local)」を選択 >「Create a release」をクリックします。
他の設定次第で多少設定が変わる(?)ので、設定は内容を読んでやりましょう。手動で試すだけならさほど気にする要素はないですが。
Releases の一覧で実行した Release のログを確認することができます。今回のパイプラインなら、Azure Functions の D:\home\data\SitePackages
に zip が格納されることが確認できるでしょう。
長くなった.... 次回は、Blob へ zip を置くやつです。