ドキュメントが分散していて苦労したので、記録しておきます。
やりたいこと
- GitHub Enterprise(以下、GHE)で管理しているソースコードから、Code Engineに直接アプリケーションをデプロイしたい。
- デプロイ中に作られるコンテナイメージは、異なるAccount上のContainer Registryに格納したい。
なんでローカルでビルドしないの?
Apple SiliconとIntelの差を気にしたくなかったからです。。
引っ掛かりポイント
-
ドキュメントと画面で言葉が異なっていて、説明文を探しにくいところでしょうか・・・
-
Container Registryの無料プランでは、1アカウントあたりが保持しておけるイメージの合計サイズが、小さめに設定されています。(500Mだったかな?)
当手順でイメージをpushするときに上限を超えた場合、403 forbidden
が返却されます。
ここで初手で権限の確認を始めると沼にハマります。
まずは、Container Registryに保管されているイメージを削除して、リポジトリの空きを増やしてからリトライしてみてください。
(うまく行っていたデプロイが急に403を吐くようになったら、大概この理由です。)ERROR: failed to push jp.icr.io/namespace/registry: unexpected status from POST request to https://jp.icr.io/v2/namespace/registry/blobs/uploads/: 403 Forbidden ------ > exporting to image: ------ error: failed to solve: failed to push jp.icr.io/namespace/registry: unexpected status from POST request to https://jp.icr.io/v2/namespace/registry/blobs/uploads/: 403 Forbidden
前提
- GHE上に、docker build & runすれば稼働できる状態のWebアプリケーションのソースコードがある。(通常のGitHubでは、検証していません。)
- IBM Cloudに、Code Engineを立ててある。
- 異なるアカウントのIBM Cloudに、Container Registryを立ててある。
やったこと
ローカルPC〜GHE
-
ローカルPCでssh-keygenを実行し、秘密鍵・公開鍵を作成します。
このあたりは詳しく解説されているページがたくさんあるので、説明は割愛します。(GHEとCode Engineの接続に利用するだけなので、専用の鍵を作るのをお勧めします。) -
公開鍵をGHEに登録します。
このあたりは詳しく解説されている(ry
Container Registry
-
Container RegistryにアクセスするためのAPIキーを作ります。
Container RegistryがあるAccountで、
コンソールからのサービス ID を使用した Container Registry へのアクセス権限の付与のステップ1〜3を実施します。
<メニューの場所>
注意と補足
- ステップ1-⑤-a: ドキュメントには
コンテナー・レジストリー
と書かれていますが、Container Registry
と入力してください。 - ステップ1-⑤-b: 私は「すべてのリソース」にしました。
- ステップ1-⑤-c: 私は「リーダー」「ライター」「管理者」を選択しました。
(「管理者」は要らないと思いますが、手戻りがイヤだったので。) - ステップ2: ステップ1で作業したサービスIDに、追加で実施してください。
- ステップ2-②-c: サービスIDには「ServiceId-」の部分も含みます。
(例:ServiceId-xxx99x99-99xx-9xx9-x999-99x999x9x99x)
<ステップ1〜2を実行すると、こんな感じになります。>
Code Engine
アプリケーションを作成します。
-
「実行するコードの選択」は、
ソースコード
を選択します。
「ソース・コードURL」は、SSHでリポジトリをクローンするときのURLを入力します。
-
「ビルド詳細の指定ボタン」を押して、デプロイの詳細を入力します。
・コード・リポジトリー・アクセス: ドロップダウンに新規作成の選択肢がありますので、追加します。(このとき、GHE用に作った秘密鍵を入力します。)
・レジストリサーバー:<Container RegistryでNamespaceを作ったロケーション>.icr.io
です。東京の場合はjp.icr.io
になります。
・レジストリー・アクセス・シークレット: Code Engine へのレジストリー・アクセス権限の追加の⑤以降を参考に作成してください。
作成ボタンは、またもや選択肢の中に隠れています。。
・名前空間: Container Registryに作成したNamespaceを入力します。(私の場合はjp-myspace
)
・リポジトリー名とタグ: 特定の名前を付ける必要が無ければ、デフォルトでOKです。 -
「作成」ボタンを押して作成開始!
-
画面が切り替わるので、右側メニューの「ロギングの起動」をクリックして、デプロイのログを確認します。
あとはログと睨めっこしながらトライ&エラーです。