前回までの記事
エイヤで作ったCodexのgithub actionsのワークフローは流石に動かなかった。
https://qiita.com/yuichiro-kawabata-fg/items/c8b8374cba2dce6d0313
対応していきます。
まずは足りていなかった権限を追加
gcloud projects add-iam-policy-binding %PROJECT_ID% ^
--member="serviceAccount:github-actions-deployer@%PROJECT_ID%.iam.gserviceaccount.com" ^
--role="roles/artifactregistry.writer"
それでもまだ以下のエラーが発生中
denied: Unauthenticated request. Unauthenticated requests do not have permission "artifactregistry.repositories.uploadArtifacts" on resource "projects/***/locations/us/repositories/gcr.io" (or it may not exist)
Error: Process completed with exit code 1.
そもそもCloud run側に最初ソースをデプロイする箱は用意してある必要がありそう。
以下からソースをデプロイ
gcloud run deploy %PROJECT_SOURCE_NAME% \
--source . \
--region=asia-northeast1 \
--platform=managed \
--allow-unauthenticated
デプロイは成功。だがテストは失敗する。
(デプロイ後のサービスURLにアクセスできるかをテストしている)
Error: Process completed with exit code 1.
Cloud RunのポータルからサービスURLを確認してアクセスしたところ以下のような画面になる。
Github Actionsからデプロイしたコンテナの、「未認証呼び出しの許可」がオフ(デフォルト)になっていることで誰もアクセスできない状態になっていた。
まずアクセス確認したいので、未認証でもアクセスできるように変更
gcloud run services add-iam-policy-binding %PROJECT_NAME% \
--member="allUsers" \
--role="roles/run.invoker" \
--region=asia-northeast1
Codexにてんこ盛りのYamlを要求したせいで、Readmeの更新などにも失敗したが冷静に考えて別に更新しなくてもいのでこの辺りを整形して最終のYamlを作る
name: Deploy to Cloud Run
on:
push:
branches:
- main
jobs:
build-test-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: |
pytest
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Configure Docker for Artifact Registry
run: gcloud auth configure-docker asia-northeast1-docker.pkg.dev --quiet
- name: Build and push container
run: |
IMAGE="asia-northeast1-docker.pkg.dev/${{ secrets.GCP_PROJECT }}/cloud-run-source-deploy/${{ secrets.SERVICE_NAME }}:${{ github.sha }}"
docker build -t "$IMAGE" .
docker push "$IMAGE"
echo "image=$IMAGE" >> $GITHUB_OUTPUT
id: build
- name: Deploy to Cloud Run
id: deploy
uses: google-github-actions/deploy-cloudrun@v2
with:
service: ${{ secrets.SERVICE_NAME }}
image: ${{ steps.build.outputs.image }}
region: ${{ secrets.GCP_REGION }}
project_id: ${{ secrets.GCP_PROJECT }}
- name: Test deployed service
run: |
curl -sSL -f ${{ steps.deploy.outputs.url }}
ワークフロー正常終了!
概念しか知らない私が、ささっとサーバレスとCICDの構成を実装できてしまうなんで
なんてすごい時代でしょうか。
参考になれば幸いです。
ここまでにお世話になったmyGPT様
Codex用のプロンプト作成
https://chatgpt.com/g/g-68333a1b75b4819191ca31f50fdd039a-codex-prompt-forge
Google Cloud特化
https://chatgpt.com/g/g-kjqMRhgXP-google-cloud-guide