从Python脚本到管道的Gitlab-CI环境变量

Den*_*aev 5 python environment-variables gitlab gitlab-ci

VERSION如何从 python 脚本中获取 gitlab-ci 环境变量值 -get_version.py对于可在 Windows 和 Linux 操作系统上运行的 gitlab-runners?我需要一些通用的解决方案,以便它可以在两种操作系统上运行。

这是我的.gitlab-ci.yml

stages:
  - versioning

variables:
  VERSION: ""

versioning:
  stage: versioning
  script:
  - echo "[versioning] ..."
  - python ./ci-cd_scripts/get_version.py
  - echo $VERSION
Run Code Online (Sandbox Code Playgroud)

这是我的./ci-cd_scripts/get_version.py

import os

refName = os.environ.get("CI_COMMIT_REF_NAME")
piplineID = os.environ.get("CI_PIPELINE_ID")
relVersion = refName + ".0." + piplineID

version = relVersion.replace("rel.", "")
print("current version is", version)
Run Code Online (Sandbox Code Playgroud)

管道日志中的python输出

小智 5

我发现有效的方法是将其保存到临时文件中。

import os

refName = os.environ.get("CI_COMMIT_REF_NAME")
piplineID = os.environ.get("CI_PIPELINE_ID")
relVersion = refName + ".0." + piplineID

version = relVersion.replace("rel.", "")
print("current version is", version)
with open('.env', 'w') as writer:
     writer.write(f'export VERSION="{version}"')
Run Code Online (Sandbox Code Playgroud)

然后在管道中您只需使用 .env 文件导出变量

script:
  - ./ci-cd_scripts/get_version.py
  - source .env
  - echo $VERSION
Run Code Online (Sandbox Code Playgroud)


Ami*_*hah 1

通常是不可能的

您可以使用os.environ内部 Python 脚本设置和修改环境变量,但当脚本完成时,一切都会恢复到之前的值。

阅读 StackOverflow 上的这些帖子会很有帮助:

为什么python中设置的环境变量不能持久化?
如何使环境变量更改保留在 Python 中?
Linux 上 Python 的环境变量