GitHub Actions で Extend app をデプロイする
注釈:本資料はAI技術を用いて翻訳されています。
Overview
Extend app のソースを GitHub でホストしている場合、公式の Deploy Extend App ワークフローを使用して自動的にデプロイできます。これはすぐに使える GitHub Actions テンプレートです。1 つのファイルをリポジトリにコピーし、いくつかの設定を追加するだけで、main へのプッシュのたびに app がビルドされ、デプロイされます。
push to main → build image → push to app registry → deploy → wait for rollout
このワークフローは、標準の GitHub ホスト型ランナー上で AGS CLI を実行します。インストールやホスティングは不要です。AccelByte/setup-ags-cli アクションが AGS CLI のインストールとサインインを行うため、ワークフローファイルは短く読みやすいままです。
AGS CLI を手動で実行する代わりに、手間のかからない再現可能なデプロイを行いたい場合に使用してください。
テンプレートは AccelByte/extend-github-actions-template リポジトリにあります。このページではセットアップの手順を説明します。テンプレート README が完全なリファレンスです。
GitHub Actions を初めて使用する場合:ワークフロー とは、main へのプッシュなど何かが起きたときに GitHub が自動的に実行する YAML ファイルです。各実行は ランナー と呼ばれる新しい一時的なマシン上で行われるため、お使いのコンピューターには何もインストールされません。ファイルをコミットすれば、あとは GitHub が処理します。
Before you begin
以下が必要です。
- 既存の Extend app。ワークフローは app をデプロイするものであり、作成するものではありません。先に Admin Portal または AGS CLI で app を作成してください。
- リポジトリのルートにある
Dockerfile。ワークフローはリポジトリのルートをビルドコンテキストとして使用します。 - 以下の権限を持つ機密 IAM クライアント。クライアント ID とクライアントシークレットを控えておいてください。クライアントを作成するには、Manage access control for applications を参照してください。
IAM クライアントに次の権限を割り当てます。
| クラウドタイプ | 権限 |
|---|---|
| AGS Private Cloud | ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS (READ)、ADMIN:NAMESPACE:{namespace}:EXTEND:APP (READ)、ADMIN:NAMESPACE:{namespace}:EXTEND:DEPLOYMENT (CREATE) |
| AGS Public Cloud | Extend > Extend app image repository access (Read)、Extend > App Management (Read)、Extend > Deployment Management (Create) |
これらはワークフローに必要な最小限の権限です。これらの権限で、ワークフローは app の読み取り、レジストリ認証情報の取得、デプロイの作成を行えます。app の作成、更新、削除はできません。
Set it up
セットアップには数分かかります。
-
テンプレートリポジトリから
deploy-extend-app.ymlを、リポジトリの.github/workflows/deploy-extend-app.ymlにコピーします。デフォルトブランチにコミットします。公式の Extend サンプル app から開始した場合は、このファイルがすでに存在している可能性があります。 -
GitHub リポジトリで、Settings > Secrets and variables > Actions > Variables に移動します。次のリポジトリ変数を追加します。
変数 説明 例 AGS_BASE_URLAGS 環境のベース URL https://dev.yourstudio.accelbyte.ioAGS_NAMESPACEapp が存在する namespace yourgameEXTEND_APP_NAME既存の Extend app の名前 guild-service -
Settings > Secrets and variables > Actions > Secrets に移動します。次のリポジトリシークレットを追加します。
シークレット 説明 AGS_CLIENT_IDIAM クライアント ID AGS_CLIENT_SECRETIAM クライアントシークレット -
mainにコミットをプッシュします。リポジトリの Actions タブを開いて、最初のデプロイを確認します。
クライアント ID とシークレットは、変数ではなく必ずシークレットとして追加してください。GitHub はリポジトリ変数をログ内でマスクしません。
ワークフローは main という名前のブランチへのプッシュでトリガーされます。デフォルトブランチの名前が異なる場合は、main に名前を変更するか、ワークフローファイル先頭の branches: [main] を変更してください。
設定に不足がある場合、ワークフローの最初のステップが数秒以内に失敗します。エラーメッセージには、不足している項目とその設定場所が示されます。
What the workflow does
各実行は次のステップで進行します。
| ステップ | 内容 |
|---|---|
| Check configuration | すべての変数とシークレットが設定されていること、およびイメージタグが有効であることを確認します。 |
| Setup AGS CLI | AccelByte/setup-ags-cli アクションを使用して AGS CLI をインストールし、キャッシュし、IAM クライアントでログインします。 |
| Build and push image | ags extend image-upload を実行して linux/amd64 向けにイメージをビルドし、app のレジストリにプッシュします。イメージタグはコミット SHA です。 |
| Deploy and wait for rollout | ags extend deploy-app を実行し、ロールアウトが完了するか待機上限に達するまで待機します。 |
| Summary | app、namespace、イメージタグ、AGS CLI のバージョン、結果を実行ページに書き込むため、ログを開かなくても結果を確認できます。 |
実行結果はデプロイステップによって決まります。デプロイが失敗すると、実行は赤(失敗)で表示されます。サマリーには次のいずれかの結果が報告されます。
| 結果 | 意味 |
|---|---|
| deployed | ロールアウトが完了し、app は正常です。 |
| failed | ロールアウトが失敗しました。再試行する前に app のログを確認してください。 |
| timed out | ロールアウトの進行中に待機上限に達しました。デプロイはキャンセルされません。 |
| did not run | 前のステップが失敗したため、デプロイステップは開始されませんでした。 |
タイムアウトしてもデプロイはロールバックされません。ロールアウトはその後完了する可能性があります。実行中のロールアウトに 2 つ目のロールアウトが重ならないよう、再デプロイする前に Admin Portal で app のステータスを確認してください。
Customize the workflow
ワークフローファイルは自由に編集できます。ファイル先頭の env: ブロックには、変更する可能性が最も高い値が含まれています。
| 変数 | デフォルト | 説明 |
|---|---|---|
AGS_VERSION | latest | インストールする AGS CLI のバージョン。 |
WAIT_LIMIT | 600 | ロールアウトの完了を待機する秒数。この時間を過ぎると待機を打ち切ります。app の起動が遅い場合は値を大きくしてください。 |
WAIT_INTERVAL | 10 | ロールアウトステータスを確認する間隔(秒)。 |
IMAGE_TAG | コミット SHA | ビルドしたイメージに付与されるタグ。 |
デフォルトでは、ワークフローは最新の AGS CLI リリースを使用するため、ファイルを編集しなくても CLI の修正が自動的に反映されます。その反面、古いコミットを再実行すると、そのコミットを最初にデプロイしたときのバージョンではなく、その時点の最新の CLI がインストールされます。再現可能なビルドが必要な場合は、AGS_VERSION: '0.5.3' のように正確なバージョンを固定してください。その場合、新しい CLI を使いたいときは、ご自身でバージョンを更新する必要があります。
イメージをビルドする前にテストを実行するには、ワークフロー内の Test ステップのコメントアウトを解除し、テストコマンドを指定します。コマンドが失敗した場合、ワークフローはビルドやプッシュを行う前に停止します。
また、ワークフローは app ごとに一度に 1 つのデプロイのみを実行し、応答しなくなったジョブは 30 分後に停止します。concurrency と timeout-minutes の設定は削除しないでください。これらの設定により、ロールアウトの重複から app が保護されます。
Deploy manually or roll back
ワークフローをオンデマンドで実行することもできます。リポジトリで Actions > Deploy Extend App > Run workflow に移動し、ブランチまたはタグを選択します。
ロールバックするには、次の手順に従います。
- 最後に正常に動作していたコミットにタグを付けるか、そのコミットからブランチを作成します。
- ワークフローを実行し、そのタグまたはブランチを選択します。
- Image tag フィールドは空のままにします。
ワークフローはそのバージョンをチェックアウトし、再ビルドして、そのコミットの SHA をイメージタグとしてデプロイします。
Image tag フィールドは、イメージにラベルを付けるためだけのものです。ビルド対象を選択するものではありません。main に対してワークフローを実行し、古い SHA を入力すると、現在の main がビルドされ、そのイメージに古い SHA のタグが付けられます。デプロイ対象を選ぶには、ブランチまたはタグのセレクターを使用してください。
Troubleshoot
| 症状 | 原因と対処 |
|---|---|
Missing repository variable または Missing secret | 変数またはシークレットが設定されていません。メッセージに、不足している項目とその設定場所が示されます。 |
| Setup AGS CLI ステップで認証に失敗する | IAM クライアントのタイプが Public ではなく Confidential であること、および AGS_BASE_URL が正しい環境を指していることを確認してください。 |
| デプロイが unauthorized で拒否される | IAM クライアントに権限が不足しています。Before you begin の一覧と照合してください。 |
| イメージはビルドされるが、app が正常にならない | 多くの場合、環境変数の不足などが原因で app が起動時にクラッシュしています。Admin Portal で app のログを確認してください。 |
app のログに exec format error が出力される | イメージのアーキテクチャがクラスターと一致していません。ビルドステップの --platform linux/amd64 を維持し、それをサポートするベースイメージを使用してください。 |
CI の外部で設定、認証、接続を確認するには、同じベース URL と IAM クライアントを使用して、ローカルで ags doctor を実行します。
Security tips
AGS_CLIENT_SECRETは長期間有効な認証情報として扱ってください。定期的にローテーションし、チームメンバーが離脱したときにもローテーションしてください。- Before you begin に記載された権限のみを、単一の namespace に限定して付与してください。
- 認証情報をシークレットから変数に移動しないでください。
Renovate によるバージョン固定を含む完全なリファレンスについては、テンプレート README を参照してください。