如何使用Python在GitHub操作中设置环境变量

ibps3vxo  于 2023-06-04  发布在  Python
关注(0)|答案(3)|浏览(582)

我想执行一个python脚本来设置GitHub操作中的一些环境变量。我想在后面的GitHub操作步骤中使用这些环境变量。我的python脚本看起来像:

new_ver = get_version_from_commit(commit_msg)
if new_ver:
    if new_ver == "false":
        os.environ["SHOULD_PUSH"] = "0"
        print("Not pushing the image to k8s")
        exit(0)
    else:
        new_tag = app_name + ":" + str(new_ver)
        os.environ["DOCKER_IMAGE_TAG"] = new_tag
        os.environ["SHOULD_PUSH"] = "1"
        print("New tag: " + new_tag)
        exit(0)

我的GitHub操作文件的一部分,在执行上述python脚本后看起来像:

- name: Print env var
  run: echo ${{ env.DOCKER_IMAGE_TAG }}
- name: Build and push
  id: docker_build
  uses: docker/build-push-action@v2
  with:
     push: true
     tags: ${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE_TAG }}

但是使用os.environ不会将环境变量暴露在python进程之外。我该怎么解决这个问题?

iszxjhcz

iszxjhcz1#

不能直接设置环境变量。相反,您需要将环境变量写入一个文件,其名称可以通过$GITHUB_ENV获取。
在一个简单的工作流步骤中,您可以将其追加到文件中,如下所示(来自文档):

echo "{name}={value}" >> $GITHUB_ENV

在Python中,你可以这样做:

import os

env_file = os.getenv('GITHUB_ENV')

with open(env_file, "a") as myfile:
    myfile.write("MY_VAR=MY_VALUE")

给定这个python脚本,你可以像下面这样设置和使用你的新环境变量:

- run: python write-env.py
- run: echo ${{ env.MY_VAR }}
sf6xfgos

sf6xfgos2#

我问我如何设置两个或多个环境变量。你必须用换行符分隔这些变量。下面是一个例子:

import os

env_file = os.getenv('GITHUB_ENV')

with open(env_file, "a") as myfile:
    myfile.write("MY_VAR1=MY_VALUE1\n")
    myfile.write("MY_VAR2=MY_VALUE2")
slmsl1lt

slmsl1lt3#

另一种可能更直接的方法是在Python代码中打印一个值,并在bash级别上“捕获”它,之后可以将其追加到GITHUB_OUTPUT变量-

  • script.py*
def main():
    print("SOME VALUE")

if __name__ == "__main__":
    main()
  • 工作流.yml*
- id: set-variable
  run: |
    YOUR_VARIABLE=$(python script.py)
    echo "YOUR_VARIABLE=${YOUR_VARIABLE}" >> $GITHUB_OUTPUT
- name: Use your variable
  run: |
    echo "Your variable value is ${{ steps.set-variable.outputs.YOUR_VARIABLE }}"

相关问题