ubuntu-latest GitHubランナーの永続OSレベル環境変数

ubuntu-latest GitHubランナーの永続OSレベル環境変数

os.environGitHubワークフローのUbuntu最新のGitHubランチャーを介してPythonアプリケーションで使用できるオペレーティングシステムレベルの環境変数を設定するには、次の特定の構文のどれを変更する必要がありますか?

ユースケース:

ユースケースは、pythonオブジェクトの値をmy-app-that-consumes-os-level-environ-variables.py使用する必要があるubuntu-latest GitHubランナーでのrunning runningというPython 3.10アプリケーションです。MY_VAR_ONEos.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-varmy-app-that-consumes-os-level-environ-variables.pyos.environ

関連情報