背景
- GitHub Actions で複数の環境変数を参照するスクリプトを実行したい
- リポジトリシークレットで変数を定義し、ワークフローからも参照して利用可能だが量が増えると手間になる
- できるだけ楽に管理したい
想定環境
- pipenv を使って python スクリプトを実行する
- 環境変数は
.env
ファイルで定義
手順
- リポジトリシークレットで一つの変数に複数の環境変数を定義
VAR1=value1 VAR2=value2 VAR3=value3 VAR4=value4 VAR5=value5 VAR6=value6 VAR7=value7 VAR8=value8 VAR9=value9
- ワークフローでシークレットを
.env
ファイルに書き出す- name: setup environments run: | echo "${{ secrets.ENVIRONMENTS }}" > .env
- スクリプト内で環境変数を参照する処理を記述する
import os print(os.getenv("VAR3")
ワークフローサンプル
name: PIPENV
on:
workflow_dispatch:
jobs:
build:
runs-on: 任意の実行環境
steps:
- uses: actions/checkout@v3
- name: install python
uses: actions/setup-python@v5
with:
python-version: "v3.11.1"
- name: install pipenv
run: |
python -m pip install --upgrade pip
python -m pip install pipenv=="2023.4.29"
- name: setup environments
run: |
echo "${{ secrets.ENVIRONMENTS }}" > .env
cat .env
- name: pipenv
run: |
pipenv run python -c "import os; print(os.getenv('VAR3'))"
実行結果(直接の出力はマスクされる)
Run echo "***
echo "***
***
***
***
***
***
***
***
***" > .env
cat .env
shell: /usr/bin/bash -e {0}
env:
pythonLocation: /opt/hostedtoolcache/Python/3.11.1/x64
PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.1/x64/lib/pkgconfig
Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.1/x64
Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.1/x64
Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.1/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.1/x64/lib
***
***
***
***
***
***
***
***
***
実行結果(スクリプトから参照しての出力は表示されてしまう)
Run pipenv run python -c "import os; print(os.getenv('VAR3'))"
Loading .env environment variables...
(略)
value3
まとめ・注意点
- 一つのシークレットに対して複数の環境変数を定義できた
- 基本的にはマスクしてくれるが、プログラムからの出力までには対応できないので、スクリプトからの出力処理には気をつける