Help us understand the problem. What is going on with this article?

Azure PipelinesからGCP App Engineへデプロイする Laravel編

概要

以下のフローを試す。
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

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

azure_app_engine_deploy7.png

ここからJobの解説

Linux Agent

azure_app_engine_deploy1.png

ソース一式はAzure Devops Reposから取得

azure_app_engine_deploy2.png

Secure filesから鍵ファイルをダウンロード(Download secure file)

Output Variablesで変数名を入れる。「gcloud」と入れました。
これでダウンロードした時のファイルパスが変数「gcloud.secureFilePath」に格納されます。

azure_app_engine_deploy9.png

サービスアカウントで認証する(gcloud auth)

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_app_engine_deploy5.png

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_app_engine_deploy6.png

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を押す。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした