📌

GitHub CLI でリポジトリへ secret を設定

2021/12/29に公開

これまではウェブの UI から設定していたのですが、そこそこ多い個数の変数を設定する必要がでてきたので GitHub CLI を使うことにしました。

マニュアル

Secret をリポジトリ(Environment) へ設定するには secret コマンドの set を利用します。

試してみる

ここでは設定と削除を試してみます。

リポジトリ Secret へ設定

set では Secret の内容を --body と標準入力などから指定することになっています。

--body で設定

$ gh secret set BASE_URL --body "foo"
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
$ gh secret list
BASE_URL  Updated 2021-12-28

GitHub リポジトリに secret が設定されたスクリーンショットウェブ UI でリポジトリ secrets を確認

標準入力で設定

$ gh secret set BASE_URL < base_url_body.txt
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
$ gh secret list
BASE_URL  Updated 2021-12-28

Environment secrets へ設定

Environment は --env で指定します。

$ gh secret set --env pages BASE_URL < base_url_body.txt
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
$ gh secret list --env pages
BASE_URL  Updated 2021-12-28

GitHub リポジトリの Environment に secret が設定されたスクリーンショットウェブ UI で Environment secrets を確認

.env から設定

.env からの一括設定にも対応していました。

試した限りでは、コメントや空行があっても問題はなさそうです。" などのエスケープ方法については今回は試していません(必要になったら調べようかと)。

.env
# test secret
BASE_PATH="/test-collage-cms-content/"

BASE_URL="https://hankei6km.github.io"
$ gh secret set --env pages-staging --env-file .env
✓ Set secret BASE_PATH for hankei6km/test-collage-cms-content
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content

.env で指定されていた変数が設定されている状態のスクリーンショットウェブ UI で一括登録されていることを確認

削除

削除コマンド実行時にウェブ UI のような確認はありません。そのまま実行されます。

$ gh secret remove BASE_URL
✓ Removed secret BASE_URL from hankei6km/test-collage-cms-content
$ gh secret list
// 削除されている

GitHub リポジトリから secret が削除された状態のスクリーンショットウェブ UI で削除されていることを確認

改行には注意

標準入力からファイル内の値などを渡す場合、値はそのまま利用されるので末尾の改行に注意が必要です。

最初 Action が失敗する理由がわからなくてしばらく悩みました(ワークフローのログに ****\n という表示があったので早めに対応できました)。

NG
$ echo "foo" | gh secret set BASE_URL
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
OK
$ echo -n "foo" | gh secret set BASE_URL
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content

スクラップ

この記事は以下のスクラップから作成しました。

GitHubで編集を提案

Discussion