0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Azure Functions] リモートビルドするように設定してデプロイしたら、CICDのzipデプロイが失敗するようになった

Posted at

はじめに結論

  • funcコマンドデプロイ時にアプリケーション設定が自動で書き換えられていた
    • リモートビルド(Functionsランタイムでビルド)する設定になっていた
  • 組んでいるCICDでは、AzureDevOpsのパイプラインを用い、MicrosoftHostedAgentでビルドした資産をzipデプロイする
    • ビルド後の資産にはビルド設定ファイルが含まれておらず、リモートビルドしようとして落ちていた
  • なのでリモートビルドするためのアプリケーション設定をOFFったら成功するようになった

環境

  • FunctionsランタイムOS:Linux
  • アプリケーションランタイム:Node16
  • コーディング言語:Typescript

失敗するようになった経緯

  • これまではCICD(AzureDevOpsのReleasesパイプライン)は成功していた
  • 色々あって、VSCodeを使ったデプロイ(リモートビルド)をやりたくなったので下記コマンドを実行
    • func azure functionapp publish $appName --build remote

その時参考にしたサイト

  • 試したいことは終わったので、CICDのデプロイを動かしたところ失敗

失敗したリリースパイプラインのログ

抜粋し、一部改変

2022-09-28T01:53:58.1244834Z ##[section]Starting: Deploy Azure Function App
...
2022-09-28T01:54:04.4089082Z Package deployment using ZIP Deploy initiated.
2022-09-28T01:56:43.2424115Z Running oryx build...
2022-09-28T01:56:43.7017455Z Command: oryx build /tmp/zipdeploy/extracted -o /tmp/build/expressbuild --platform nodejs --platform-version 16 -i /tmp/8daa0f468b80c00
...
2022-09-28T01:56:43.7045398Z Running 'npm run build'...
2022-09-28T01:56:43.7049424Z > XXXXXXXXX@1.0.0 build
2022-09-28T01:56:43.7050004Z > tsc --project ./tsconfig.build.json
2022-09-28T01:56:43.7050186Z 
2022-09-28T01:56:43.7050815Z error TS5058: The specified path does not exist: './tsconfig.build.json'.

npm run buildをしようとして、tsconfig.build.jsonがないため落ちてる

原因

それもそのはず、CICDではビルドしたArtifactがzipデプロイされており、TS→JSにトランスパイルされているのでtsconfig.build.jsonやらtsconfig.jsonなどの設定ファイルはデプロイ資産に入っていない

なぜリモートビルドが動いたのか?

func azure functionapp publish $appName --build remote
こちらのコマンドを使用した際の引数でリモートビルドを指定するかどうかで動きが変わるものと思っていたが、どうやらAppServiceのアプリケーション設定を書き換えてしまうようだ。
前後比較したわけではないので定かではないが、見覚えのないアプリケーション設定がいくつか追加されていた。

プロジェクトでリモート ビルドを使用する必要がある場合は、WEBSITE_RUN_FROM_PACKAGE アプリ設定を使用しないでください。 代わりに、SCM_DO_BUILD_DURING_DEPLOYMENT=true デプロイ カスタマイズ アプリ設定を追加します。 Linux の場合は、さらに ENABLE_ORYX_BUILD=true 設定を追加します。 詳細については、「リモート ビルド」を参照してください。

こちらを見ると、下記2つがリモートビルドのために書き換えられたor追加されたのだと思われる。

  • SCM_DO_BUILD_DURING_DEPLOYMENT=true
  • ENABLE_ORYX_BUILD=true

CICDを元通り動くようにする

リモートビルドのためのアプリケーション設定を、どちらもfalseに変えてあげるだけ

  • SCM_DO_BUILD_DURING_DEPLOYMENT=false
  • ENABLE_ORYX_BUILD=false

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?