はじめに
GitHub repositoryにyamlファイルを書くことで、Commit時やPR反映時等色々な場面で利用できるGitHub Actions。
そんなGitHub Actionsに処理を書いていると、外部サービスと連携するためにアクセストークンのような機密情報を保持したくなります。
この記事では、その機密情報の扱うためのSecretsの使い方について記載します。
GitHub repositoryのSecrets
使い方は簡単で、GitHub内のsecretを設定したいリポジトリのページを開き、下記Settingsから設定を行います。
例えばSecretSettingという設定を追加した場合は、以下のように secrets.SecretSetting
を変数に代入することで、run内に書いたスクリプトでsecretが扱えるようになります。
- name: Access to secret
env:
SECRET_SETTING: ${{ secrets.SecretSetting }}
run: |
##access to $SECRET_SETTING if this script is bash
詳細は公式ページを参照ください。
注意
上記Settingsを扱えるのは、リポジトリのオーナーのみです。
GitHub APIを利用してより汎用的に
上記の方法でも事足りるのですが、Secretsの設定はリポジトリごとにしかできず、さらにその権限はリポジトリのオーナーごととなっています。
大量にリポジトリがある場合は骨の折れるので、APIを利用して設定を行います。
APIを利用する方法の一つとして、tokenを発行する方法があります。Private repositoryを使う場合はrepo Full control of private repositories
が必要です。
tokenが取得できたらあとはAPIを叩くだけ。
APIの仕様はこちら。Updateする際はpublic keyを取得した上でLibSodiumを利用してkeyを暗号化するのが特徴です。
ざっくりシーケンスはこんな感じ
また、GitHub APIを利用するためのgolangライブラリが公開されていますので、プログラムで利用することも楽ちん。
上記を紹介した記事Github Actions Secrets API を使って Go で Secrets を更新するを参考に、golangでのサンプルコマンドを作成しています。
参考
公式ページ
GitHub ヘルプ: 暗号化されたシークレットの作成と保存
GitHub Developer: REST API v3 Secrets
Libsodium documentation
その他参考
Github Actions Secrets API を使って Go で Secrets を更新する
GitHub APIの仕組みを知り、APIでrepositoryを作成しよう