2024年4月12日 更新

GitHub Actions で一つのシークレットに複数の環境変数を定義して利用する

背景

・GitHub Actions で複数の環境変数を参照するスクリプトを実行したい
・リポジトリシークレットで変数を定義し、ワークフローからも参照して利用可能だが量が増えると手間になる
・できるだけ楽に管理したい

想定環境

・pipenv を使って python スクリプトを実行する
・環境変数は .env ファイルで定義

手順

1.リポジトリシークレットで一つの変数に複数の環境変数を定義


VAR1=value1
VAR2=value2
VAR3=value3
VAR4=value4
VAR5=value5
VAR6=value6
VAR7=value7
VAR8=value8
VAR9=value9


.

2.ワークフローでシークレットを .env ファイルに書き出す


  - name: setup environments
run: |
echo "${{ secrets.ENVIRONMENTS }}" > .env


.

3.スクリプト内で環境変数を参照する処理を記述する


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


.

まとめ・注意点

・一つのシークレットに対して複数の環境変数を定義できた
・基本的にはマスクしてくれるが、プログラムからの出力までには対応できないので、スクリプトからの出力処理には気をつける

※掲載内容は個人の見解です。
※会社名、製品名、サービス名等は、各社の登録商標または商標です。

関連記事