GitHub Actionsで条件に応じて変数に値を設定したい。
例えばmainブランチを対象とする場合はenvironmentにproduction
を、それ以外のブランチを対象とする場合はdevelopment
を設定したい。
このようなケースでは三項演算子が利用できる。
これを利用すれば条件に応じて変数に値を設定することができる。
env: MY_ENV_VAR: ${{ github.ref == 'refs/heads/main' && 'production' || 'development' }}
条件が増えた場合も同じように対応可能だが可読性が悪くなる。
このようなケースでは actionsとして kanga333/variable-mapper
がよさそう。
on: [push] name: Export variables corresponding to regular expression-matched keys jobs: build: runs-on: ubuntu-latest steps: - uses: kanga333/variable-mapper@master with: key: "${{github.base_ref}}" map: | { "master": { "environment": "production", "AWS_ACCESS_KEY_ID": "${{ secrets.PROD_AWS_ACCESS_KEY_ID }}", "AWS_SECRET_ACCESS_KEY": "${{ secrets.PROD_AWS_ACCESS_KEY_ID }}" }, "staging": { "environment": "staging", "AWS_ACCESS_KEY_ID": "${{ secrets.STG_AWS_ACCESS_KEY_ID }}", "AWS_SECRET_ACCESS_KEY": "${{ secrets.STG_AWS_ACCESS_KEY_ID }}" }, ".*": { "environment": "development", "AWS_ACCESS_KEY_ID": "${{ secrets.DEV_AWS_ACCESS_KEY_ID }}", "AWS_SECRET_ACCESS_KEY": "${{ secrets.DEV_AWS_ACCESS_KEY_ID }}" } } - name: Echo environment run: echo ${{ env.environment }}
これを利用すれば、複数の環境変数を条件に応じて設定できるし可読性が高くなる。 ただし、上記のような使い分けになるとGitHub Environmentsの方が管理しやすくなりそう。
これらを踏まえて、environmentsを動的に選択する処理には三項演算子を、environmentに応じた変数の使い分けはGitHub Environmentsを利用する。 environmentsで切り替えるようなユースケースでない場合は kanga333/variable-mapper を利用する。