4
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 5 years have passed since last update.

Azure DevOpsAdvent Calendar 2019

Day 5

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

Last updated at Posted at 2019-12-10

概要

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

4
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
4
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?