Cloud Scheduler と Cloud Runを使用し、期限切れの GitHubのISSUEをSlackへ飛ばす

Cloud Scheduler と Cloud Runを使用し、期限切れの GitHubのISSUEをSlackへ飛ばす

構成

全体のソースコードはこちら

GitHub - kooooohe/notify-github-todo
Contribute to kooooohe/notify-github-todo development by creating an account on GitHub.

まずは開発環境で試してみる

docker-compose.yaml

medium-blog-cloud-run-docker-compose.js
medium-blog-cloud-run-docker-compose.js. GitHub Gist: instantly share code, notes, and snippets.
version: "3"
services:
  node:
    image: node:13
    volumes:
      - ./app:/app:cached
    working_dir: /app
    env_file:
      - .env
    tty: true
    ports: 
      - 8080:8080
    command: ["node", "index.js"]
    ```
  • GitHubのAccess Tokenを取得
  • SlackAppの Incoming Webhook URL を取得
  • 取得したいGitHub IssueのAPI URL

それらをdokcer-compose.yaml と同じ階層の.envにおいておく

GITHUB_API=XXXXGITHUB_TOKEN=XXXXTARGET_SLACK_API=XXXX

IssueのTitleに YYYY/MM/DD形式で期限をつける

そして, docker-compose up として、コンテナの中に入り、 yarn install && node index.js とし、

localhost:8080 にアクセスするとslack通知がとぶ

※index.jsは GitHub にありますので、コードの確認は各自お願いします

Cloud Runで動かすためのImageのDockerfileを準備

今回は Dockerfile.prodという名前で準備する

FROM node:13

WORKDIR /app

COPY ./app/package*.json ./
COPY ./app/yarn.lock ./

# Install production dependencies.
RUN yarn install --production

# Copy local code to the container image.
COPY ./app/index.js ./

# Run the web service on container startup.
CMD [ "node", "index.js" ]

GCPで環境を構築する

API許可

  • Cloud Run
  • Cloud Container Registry
  • Cloud Build

のAPIを許可しておく

次に、Cloud BuildからCloud RunへDeployするために、サービスアカウントの設定をする

cloudbuild.yaml

cloudbuild.yaml
GitHub Gist: instantly share code, notes, and snippets.
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/todo-notify', '-f', 'Dockerfile.prod', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/todo-notify']
# Deploy image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['beta', 'run', 'deploy', 'todo-notify', '--image', 'gcr.io/$PROJECT_ID/todo-notify', '--region', 'us-central1', '--platform', 'managed']
images:
- gcr.io/$PROJECT_ID/todo-notify

Dockerfile.prodのBuildからCloud RunへのDeployまでを行う

todo-notifyという名前でCloud Runを作成する

そして、Cloud Runは非認証からのリクエストは受け付けないようにする

ここまで準備すると、 gcloud builds submit でCloud RunへDeployできる

その後、Cloud Runの環境変数に

GITHUB_API=XXXXGITHUB_TOKEN=XXXXTARGET_SLACK_API=XXXX

を設定する

Cloud Schedulerを設定する

Cloud SchedulerからCloud Runを実行するためのService Accountを作成

今回はinvoke-cloud-runという名前で作成

そして、Cloud Runの今回のサービス詳細から、 Cloud Run 起動元 権限を付与

Cloud Scheduler を設定する

Auth header でOIDC tokenを選択し、

先程作成したService Accountを入力する

※今回はテストのため、1hごとに実行されるように設定しました

画面上で RUN NOW 通すと、Cloud Schedulerを実行し試すことができる

便利!

これでよいGitHub Issue TODO ライフを!!

ちなみに、GitHubのProject 機能を使って、カンバンを使うのもおすすめ