公式ドキュメントにも手厚く記載されている内容ですが、備忘録も兼ねて記載しておきます。
TL;DR
- GitHub APIをリクエストする時は認証する
- GitHub Actionsの場合はGITHUB_TOKENかGitHub Appを使って認証する
GitHub APIのレート制限について
以下のようにレート制限があるので認証せずにリクエストしてるとCIが失敗することがある。
認証されていないリクエストでは、レート制限により 1 時間あたり最大 60 リクエストまで可能です。 認証されていないリクエストは、リクエストを発行した人ではなく、発信元の IP アドレスに関連付けられます。
具体的にどんなエラーに遭遇したか?
GitHub Actionsでkustomizeをインストールする時に頻繁にrate limitエラーが出ていました。最初は原因が分からず以下のようにリトライを入れることで緩和していましたがそれでも失敗する時がありました。
- name: Install kustomize
run: |
curl -s --retry 3 "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/kyaml/v0.13.10/hack/install_kustomize.sh" | bash
chmod +x kustomize
echo ${{ github.workspace }} >> $GITHUB_PATH
install_kustomize.shはapi.github.comからkustomizeをダウンロードする作りになっているため、認証なしでリクエストするとrate limitエラーになっていました。
ちなみにinstall_kustomize.shは公式(kubernetes-sigs/kustomize)で提供されているインストールスクリプトです。
上記のバージョン(kyaml/v0.13.10)では、GitHub認証に対応していなかったのですがこのPRで対応してくれていたのでバージョンを上げつつ認証を通してやることで解消しました。
- name: Install kustomize
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/kyaml/v0.14.3/hack/install_kustomize.sh" | bash
chmod +x kustomize
echo ${{ github.workspace }} >> $GITHUB_PATH
この例に限らずインストールを含むステップはGitHub APIを叩いているケースが多いので、知らないと認証漏れでAPIエラーになるケースは多そうです。