コンテキスト
サービスアカウントの秘密鍵など、複数行にわたる認証情報を開発環境と GitHub Actions から利用したい
TL:DR;
ローカル環境の .env
などで改行を \n
で設定している場合、GitHub Actions 用 secret に設定する際には \n
ではなく改行コードで設定する必要がある
ローカル開発環境での設定
ローカル開発環境で direnv
や .env
ファイルを使って環境変数を設定する場合、改行は \n
で表現する:
# .env
HIMITSU_KEY="-----BEGIN PRIVATE KEY-----\nhello\n-----END PRIVATE KEY-----"
この設定は実行時に適切に解釈され、下記のように改行が反映される:
$ echo $HIMITSU_KEY
-----BEGIN PRIVATE KEY-----
hello
-----END PRIVATE KEY-----
GitHub Actionsでの設定
一方、GitHub Actions 用の secrets では、実際の改行を含めて設定する必要がある:
# 良い例
-----BEGIN PRIVATE KEY-----
hello
-----END PRIVATE KEY-----
悪い例
# 悪い例
-----BEGIN PRIVATE KEY-----\ndo not do this\n-----END PRIVATE KEY-----
Workflow run において、secrets を echo
しての値確認はセキュリティリスクがあるため避けたく、このような状況においてのデバッグでは、「ローカルで設定している値とまったく同じものを secrets に設定できているか」という観点でチェックしがちなのでハマることがある。
とにかく起きているエラーの再現が重要
エラーの親切さはどうしても利用サービスに依存してしまうが、下記のように キーが全く設定されていない 旨のエラーが出ている状況なら、そもそもシンタックスに問題があることに気付きやすくなる:
Connection with BigQuerySqlClient to dataset name ****** failed. Please check if you configured the credentials at all and provided the right credentials values. You can be also denied access or your internet connection may be down. The actual reason given is: No key could be detected.
invalid key
のような不親切なエラーだと厳しいかも。
いや、まぁ気づけるか。