os.environ
GitHubワークフローのUbuntu最新のGitHubランチャーを介してPythonアプリケーションで使用できるオペレーティングシステムレベルの環境変数を設定するには、次の特定の構文のどれを変更する必要がありますか?
ユースケース:
ユースケースは、pythonオブジェクトの値をmy-app-that-consumes-os-level-environ-variables.py
使用する必要があるubuntu-latest GitHubランナーでのrunning runningというPython 3.10アプリケーションです。MY_VAR_ONE
os.environ
質問:
問題は、以下のワークフローで/etc/environment
、または/etc/bashrc
書き込みを試みるたびに権限拒否エラーが発生することです/etc/profile
。
私たちが試したこと:
GitHub Workflow環境変数を設定しようとしましたが、GitHub環境変数はPythonに伝播されません。 Python 3.10アプリケーションの内容をos.environ
印刷してos.environ
テストしましたがos.environ
。
さらに、次のコマンドは、アプリケーションの実行export MY_VAR_ONE=/path/to/some.yaml
中に保持される永続的なオペレーティングシステムレベルの環境変数の作成に失敗します。my-app-that-consumes-os-level-environ-variables.py
GitHubワークフロー:
以下は、永続的な環境変数を設定してからトリガーする必要があるubuntu-latest起動スクリプトを含むGitHubワークフローですmy-app-that-consumes-os-level-environ-variables.py
。
name: set-os-environ-var
on:
push:
branches:
- dev
jobs:
set-os-environ-var:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- shell: bash
name: Configure agent
run: |
export MY_VAR_ONE=/path/to/some.yaml
sudo echo "export MY_VAR_ONE=/path/to/some.yaml" >> /etc/environment
sudo echo "export MY_VAR_ONE=/path/to/some.yaml" >> /etc/bashrc
sudo echo "export MY_VAR_ONE=/path/to/some.yaml" >> /etc/profile
python my-app-that-consumes-os-level-environ-variables.py
環境変数を使用するアプリケーション:
簡単な例は次のとおりですmy-app-that-consumes-os-level-environ-variables.py
。
import os
#The output from this next line must include MY_VAR_ONE , but does not currently.
print("os.environ contains: ", str(os.environ))
答え1
ワークフローでキーワードを使用するのがenv
正しい答えです。私たちが書いたら:
name: set-os-environ-var
on:
push:
branches:
- dev
jobs:
set-os-environ-var:
runs-on: ubuntu-latest
env:
MY_VAR_ONE: /path/to/some.yaml
steps:
- uses: actions/checkout@v3
- shell: bash
name: Configure agent
run: |
python my-app-that-consumes-os-level-environ-variables.py
これにより、ジョブのすべての段階MY_VAR_ONE
で環境変数を使用でき、値がに表示されます。set-os-environ-var
my-app-that-consumes-os-level-environ-variables.py
os.environ