Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

githubactionsで.env.sampleが読み込まれない

解決したいこと

githubactionsを使用しているのですがそこでmodule.pyを実行するとNoneが返ってきてうまく読み込めていないです。ローカルの環境ではしっかりと出力されています。

module.py
import settings
if __name__ == "__main__":
    token = settings.GAT
    repo_name = settings.REPO_NAME
    file_name = settings.FILE_NAME

    print(token)
    print(file_name)
    print(repo_name)
env.sample
GITHUB_ACCESS_TOKEN = '<GITHUB_ACCESS_TOKEN>'
REPO_NAME = '<REPO_NAME>'
FILE_NAME = '<FILE_NAME>'
setting.py
import os
from os.path import join, dirname
from dotenv import load_dotenv
import dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

GAT = os.environ.get('GITHUB_ACCESS_TOKEN')
REPO_NAME = os.environ.get('REPO_NAME')
FILE_NAME = os.environ.get('FILE_NAME')

発生している問題・エラー

Run python module.py
  python module.py
  shell: /usr/bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/3.8.11/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.8.11/x64/lib
None
None
None

自分で試したこと

ファイルはすべて同じ階層に置いてあります。

0

1Answer

まず、 .env.sample は書式のサンプルなので読み込まれません。実際に読み込まれるファイルは .env です。

次に、 .env は普通 git にはコミットしません。これは手元の開発環境で手軽に環境変数をセットするためのものです。読み込まれていないということは .gitignore などでコミットしないように設定されているのではないでしょうか。何にしても、アクセストークンなどの機密情報は絶対に git にコミットしてはいけません。

GitHub Actions で機密情報を環境変数にセットするには暗号化されたシークレットを使ってください。 https://docs.github.com/ja/actions/reference/encrypted-secrets

機密でない情報を環境変数をセットするにはワークフローファイルに書くだけでいいです。 https://docs.github.com/ja/actions/reference/environment-variables

1Like

Comments

  1. @namekosiru

    Questioner

    おっしゃる通り、envファイルは載せていないです。例えばpythonのコード上でアクセストークンなどの機密情報などを使用したい場合はどのようにすればいいのでしょうか。
    githubactionsのシークレットを使って指定するだけで使えるのでしょうか
  2. コードからアクセストークンを使うときは今のように環境変数から読むようにし、 .env ファイルがないときはロード処理を飛ばしてください。

    GitHub Actions にはシークレットを暗号化して保存する機能と、ワークフロー実行時にシークレットを環境変数に注入する機能があります。それらを設定してアクセストークンを GITHUB_ACCESS_TOKEN に注入してください。大まかなやり方はこのページが参考になります。 https://qiita.com/inouet/items/c7d39ac4641c05eec4a0

    REPO_NAME, FILE_NAME の値は機密でなければワークフローファイルに直接書いて大丈夫です。
  3. @namekosiru

    Questioner

    ありがとうございます。無事できました

Your answer might help someone💌