首页 > 解决方案 > 从管道中的 python 脚本更新 Gitlab 环境变量

问题描述

我正在尝试从 python 脚本更新 Gitlab 环境变量:

在 gitlab-ci.yml

gitlab_job:
  stage: gitlab_stage
  script:
    - python set_myvar.py
    - echo $MYVAR

在 set_myvar.py

import os
os.environ["MYVAR"] = my_value

我不需要变量持续存在。我只需要它以编程方式更新(来自python)。

到目前为止,它什么也没做。

标签: pythonenvironment-variablesgitlab-ci

解决方案


那是行不通的。UNIX 进程模型要求某些属性是进程私有的。这包括诸如进程的当前工作目录及其环境变量之类的东西。这些私有属性中的每一个都是继承的;隐式或显式取决于子进程如何由其父进程生成。子进程不能修改其父进程的那些私有属性。

有一些方法可以解决上述限制。例如,子进程可以将新var=value对写入标准输出。然后,运行你的 python 程序的父进程可以读取这些字符串并将它们添加到它的环境中。在你的情况下,你的 python 程序会做print("MYVAR=my_value"),你会从你的 gitlab 脚本中运行它作为eval $(python set_myvar.py).


推荐阅读