概要
以下のフローを試す。
Azure Devops Repos → Azure Pipelines → Cloud Build → App Engine
App Engineでは特定のディレクトリ以外の書き込みが禁止されているためLaravelのキャッシュ生成でエラーが出てしまう。
Azure PipelinesのHosted Agentにバンドルされているgcloudコマンドにはbetaが入っていないので --no-cache
オプションが使えなかった。
Azure Pipelines上でComposer等一通りのインストールを済ませた状態にしてCloud Buildへ投げることにした。
Hosted Agentは実行するたびに初期化されているはずなので
gcloudの認証解除は必要ない気がするけど一応やってある。
※12/12追記:secure filesという便利機能があったのでgcloud認証処理を直しました。
GCP
サービスアカウント作成
メニューからIAMと管理 → サービスアカウント
ここでAzure Pipelines用のサービスアカウントを作ります。
権限はプロジェクトの「編集者」にします。
json形式で鍵を出力します。
App Engine
App EngineとApp Engine Admin APIを有効にしてください。
Azure Pipelines
Devops
今回はWebAppという名前で作りました。
DevopsにFile Creatorをインストールします。
https://marketplace.visualstudio.com/items?itemName=eliostruyf.build-task
app.yaml
service: laravel-test
runtime: php72
instance_class: F4
env_variables:
APP_DEBUG: true
APP_ENV: development
APP_KEY: YOUR_APP_KEY
APP_STORAGE: /tmp
VIEW_COMPILED_PATH: /tmp
SESSION_DRIVER: cookie
LOG_CHANNEL: stackdriver
Laravelの調整
Laravelのストレージとログの処理を多少いじる必要があるので公式ページを参考に追記します。
https://cloud.google.com/community/tutorials/run-laravel-on-appengine-standard?hl=ja
GCPサービスアカウントの鍵ファイル(JSON)をSecure filesに登録
Pipelines → Library → Secure files
ここからJobの解説
Linux Agent
ソース一式はAzure Devops Reposから取得
Secure filesから鍵ファイルをダウンロード(Download secure file)
Output Variablesで変数名を入れる。「gcloud」と入れました。
これでダウンロードした時のファイルパスが変数「gcloud.secureFilePath」に格納されます。
サービスアカウントで認証する(gcloud auth)
gcloud auth activate-service-account $(gcp_client_email) --key-file=$(gcloud.secureFilePath) --project=$(gcp_project_id)
Composer installを実行(composer install)
php composer.phar install --no-dev
LaravelのAPP_KEYを生成して差し替え(generate APP_KEY)
sed -i "s#YOUR_APP_KEY#$(php artisan key:generate --show --no-ansi)#" app.yaml
gcloud デプロイ(gcloud App Deploy)
gcloud app deploy app.yaml -q --project=$(gcp_project_id)
gcloud 認証解除(gcloud auth revoke)
gcloud auth revoke $(gcp_client_email)
Jobを実行して成功したらApp Engineを確認してください。
Azure PipelinesからのSlack通知
Slackアプリがあるのでこれを使います。
https://docs.microsoft.com/en-us/azure/devops/pipelines/integrations/slack?view=azure-devops
ページ内の[Azure Pipelines Slack app]リンクからSlackにアプリ(Azure Pipelines)を登録します。
アプリを登録したチャネルで
/azpipelines subscribe [pipeline url]
を送信
※[pipeline url]はAzure Pipelinesで作ったCIのURL
送信するとAzure Pipelinesへの認証を求められるので
接続したいアカウントで認証して発行されたコードを入力する
has added subscription to Build completed notification for pipeline [CI Name]
というメッセージが帰ってきたら設定完了
これでAzure PipelinesでCIを実行するたびに結果が通知されます。
特に自分でコードを書く必要はありません。
Azure PipelinesのHosted Agentにインストールされているもの
公式ページで確認できます。
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops
このページの「Use a Microsoft-hosted agent」
確認したいImageのIncluded SoftwareのLinkを押す。