GitLabからAzure Storageに静的サイトをデプロイする
やりたいこと/やること
- GitLabのCI/CD機能を使ってAzure Storageにデプロイする
- サービスプリンシパルを使って自動でデプロイする
- $webというストレージ名で静的サイトとして表示する
- Dockerのazure-cliイメージでazコマンドを使いデプロイ
Azure上の設定
- ストレージアカウントサービスを作っておく
- サービスプリンシパルを作る
- アクセスキーをメモっておく
ストレージアカウントを作ったら「静的な Web サイト (プレビュー)」から静的なウェブサイトの機能を有効にしておく。インデックスドキュメント名はプロジェクトによるが大抵index.html
になるはず(この設定は明示的な指定が必要)。有効にする$webという名前のついたStorageコンテナが作成される。
サービスプリンシパルはコマンドで作るのが楽(参考: Azureのサービスプリンシパルがあまりにわかりにくいのでまとめておく | OpenGroove。 azコマンドのインストール方法は省略(参考: Azure CLI のインストール | Microsoft Docs)
az login
で自分のAzureアカウントでログインaz ad sp create-for-rbac -n app_name --role contributor
でapp_nameという名称のサービスプリンシパルが作成される。このときパスワード情報などがJSONとして出力されるのでどこかにメモしておく。role属性も用途に合わせる。
最後に「アクセスキー」からストレージアカウント名とキーをどこかにメモっておく(キーは2つあるうちのどちらかで良い)。GitLabの設定で使う。
GitLab上の設定
- パスワード情報などを環境変数として設定する
リポジトリのSettings→CI/CDのVariablesに以下のように設定。
AZURE_PASSWORD
: JSONのpassword
の値AZURE_TENANT
: JSONのtenant
の値AZURE_STORAGE_ACCOUNT
: アクセスキーのストレージアカウント名AZURE_STORAGE_KEY
: アクセスキーのキー
これらの値は.gitlab-ci.yml
に設定するときやaz
コマンドの実行時に使用される。
.gitlab-ci.ymlの設定
ビルドコマンドやデプロイコマンドを並べていくだけ。必要に応じてテストとかも。
GitLabのartifacts
を使って成果物をストレージの方にaz
コマンドでアップロードする。サービスプリンシパルの指定はhttp://
つきでアプリ名を指定する。
GitLabのVariablesでProtectedに設定するとProtected Branchでしか参照できなくなるので注意。
URLはAzure上の「静的な Web サイト (プレビュー)」のプライマリエンドポイント。
もう少し楽な方法はないものか。