🐈⬛
cloudflare/wrangler-action@v3で環境ごとのsecretを設定する
はじめに
cloudflare/wrangler-action@v3でsecretを設定するサンプルとして以下のコードが載っています。
jobs:
deploy:
steps:
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
secrets: |
SECRET1
SECRET2
env:
SECRET1: ${{ secrets.SECRET1 }}
SECRET2: ${{ secrets.SECRET2 }}
例えば、本番環境では SECRET2
を設定しなかった場合、この設定ではエラーになってしまいます。
Error: Value for secret SECRET2 not found in environment.
Error: Failed to upload secrets.
Error: 🚨 Action failed
無視してくれてもいいのにと思いつつ、試行錯誤したので解決した方法を書きたいと思います。
環境ごとに分ける
ステージングには SECRET1
SECRET2
を指定し、本番には SECRET1
だけを指定します。
ここまではよく見るので簡単です。
secrets: ${{ github.ref_name != 'main' && 'SECRET1 SECRET2' || 'SECRET1' }}
が、 SECRET1 SECRET2
が一つの環境変数と認識されてしまい、今度はステージングの方でエラーになりました。
Error: Value for secret SECRET1 SECRET2 not found in environment.
Error: Failed to upload secrets.
Error: 🚨 Action failed
改行する
secrets
には設定する環境変数を改行区切りで指定するので、 SECRET1 SECRET2
が改行されるように指定しなおします。
改行コードを入れる
まずはシンプルに改行コード \n
を入れてみたのですがそのまま表示されました。
secrets: ${{ github.ref_name != 'main' && 'SECRET1\nSECRET2' || 'SECRET1' }}
Error: Value for secret SECRET1\nSECRET2 not found in environment.
Error: Failed to upload secrets.
Error: 🚨 Action failed
ためしにエスケープして \\n
を入れてみたものもダメでした。
secrets: ${{ github.ref_name != 'main' && 'SECRET1\\nSECRET2' || 'SECRET1' }}
Error: Value for secret SECRET1\\nSECRET2 not found in environment.
Error: Failed to upload secrets.
Error: 🚨 Action failed
fromJSON()を使う
こんな時は公式のドキュメントを眺めていると解決策が見つかることがあります。
fromJSONという関数を見つけました。
改行を入れてもそのまま文字列として認識されてしまうので、JSON文字列をデコードしてみます。
secrets: ${{ github.ref_name != 'main' && fromJSON('"SECRET1\nSECRET2"') || 'SECRET1' }}
✨ Successfully created secret for key: SECRET1
✨ Successfully created secret for key: SECRET2
出来ました。
まとめ
実際はもっと多くの環境変数を指定しているので結構不細工ですが、目的は達成出来ました。
かっこいいやり方をご存知の方は素敵なコメントで教えてください。
Discussion