DevOps Starterからではコンテナーが必要とわかったので、Starterを使わずに、DevOpsでプロジェクトを作成し、そこからパイプラインを使ってデプロイするようにしてみる。
まず、今回はお試しなのでLaravelのモデルの使用はないものとする。AzureでのDBへの接続はなしでやってみた。
Azure DevOpsのReposにpushする
Laravelアプリをローカル環境で作成したら、AzureDevOpsのReposにアップする。プロジェクトを作成すれば、Reposにアップできるようになる。
githubと同様、sshかパスワード認証かを選んでローカルにcloneする。
リモートURLを設定したらpushする。
パイプラインの前にApp Serviceでアプリを作成する。
パイプラインでデプロイ先を選択するので、先にアプリを作詞英しておく。
作成時に公開をコードにしておく。
アプリケーション設定をする
laravelのenvファイルは作成されないので、アプリの構成のアプリケーション設定でする。
APP_NAMEなど、envファイルにあるものはここに書く。
今回はDBは使わないので、それ以外を記入。
環境変数
https://qiita.com/Fea/items/60bf3cbb96cd97334852
Azure Pipelineを作成してビルド
アップできたら次にパイプラインを作成する。
pipelinesのnew pipelineからconnectでAzure Reposを選択、
Selectで リポジトリを選択し、phpのlinax web app on Azureを選択する。
これで簡単にシンプルなymlファイルができる。
別の方法としては、use the classic editerがあるが、こちらにはphpがなくなったので、できない。
パイプラインができたら、メニューのpipelineを選択して、作成されたパイプラインの右のメニューからEditを選択して中を見てみる。
ここのvariablesにあるphpVersionを作成したものに合わせる。
これを保存して、Runすれば、Repos内でcomposer install が行われ、ビルドされる。
パイプラインのReleaseを作成
次にパイプラインのReleasesから新たに作成する。
+New から release pipelineを選択し、テンプレートを選択する。
今回は、MySqlは使わないので、Azure App Service deploymentを選択する、
Add Artifactから、先ほど作成したビルドパイプラインを選択する。
Add Stageを選択し、deploy azure app service タスクを追加する。
App service nameで作成したアプリの名前を入力
注意すべきはPackage or folderで、Artifactのパスを入れること。
Stage1を選択し、先ほど設定したタスク内の設定をする。
このAgent jobは必要である。
Saveをクリックして保存する。
create releaseで新たにパイプラインを作成可能、
自動実行するときは、作成時の ‘stages for a trigger change from automated to manual’ で何も選択しないこと。
パイプラインを動かしてデプロイ
デプロイに成功したが、アプリのURLを見ても403と表示されており、コンテンツへのアクセスができない状態である。
これはまだ未解決だが、考えられる原因について調べてみた。
考えられる原因1:アーティファクトが生成されているのか?リリースパイプラインで読み込めているのか?
ローカル環境からmasterブランチにpushすると、設定したトリガーによりビルドのパイプラインが自動で動く。
これが成功すると、リリースパイプラインが動くはずだが、動かない。
手動で動かしてみるが、
warningで、No artifacts are available in the build 228と出る。
composer installでミスったとも考えられたが、ログを見てもビルド側に特にエラーはない。
おそらく、リリースパイプラインからビルドされたものが拾えないのだろうと考えた。
アーティファクトは、ビルドされたアプリのインストーラーやドキュメントのzipファイルなどだが、これがAzure App Service Deployのpackage or folderのルートと合っていないといけない。
初期設定は変数が入っている。
これをpublicにしてもうまくいかなかった。
考えられる原因2:ルートディレクトリの設定
単にデプロイしたのでは、レポジトリのルートを参照してると思われる。
ドキュメントを見ても、publicの中のhtaccess以外にリポジトリルートに追加するものだった。
しかし、追加してみたが403となった。
参考
https://qiita.com/hisw/items/69a3529de7f9242e3f75#comment-0b3f657f0c8989b71dd9
https://learn.microsoft.com/ja-jp/azure/app-service/configure-language-php?pivots=platform-linux
https://learn.microsoft.com/ja-jp/biztalk/core/feature-pack-add-build-release-definitions
他に試したこと
リリースパイプラインは複数環境に上げるときに便利なので、単一環境の場合は使わなくても良いらしい。
従って、パイプラインにビルドスクリプト(composer install)を書いて、その後にAzure App Service Deployのタスクを追加した。
そこでも、Folderを変えてみたりしたが、403のままであった。
しかし、1つのパイプラインにまとめたことで、no artifactというエラーは出なくなった。
この方法が一番近いようだ。
あとはやはりルートの問題と考えられる。
もし何かわかったらこちらにお願いしたい。