【问题标题】:Update Gitlab environment variables from a python script in a pipeline从管道中的 python 脚本更新 Gitlab 环境变量
【发布时间】:2020-04-29 01:04:50
【问题描述】:

我正在尝试从 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)。

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

【问题讨论】:

  • os.environ 不允许您修改 shell 的环境变量,它只是它们的字典表示。您最好在 bash 中设置环境变量,并使用 python 为其创建输出。类似export MYVAR=$(python -c 'print("NewValue")')

标签: python environment-variables gitlab-ci


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2021-12-14
    • 1970-01-01
    • 2021-12-17
    • 2019-09-24
    • 2017-07-25
    • 2012-01-19
    相关资源
    最近更新 更多