从Python脚本到管道的GitlabCI环境变量

2024-04-26 11:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从python脚本get_version.py中获取gitlab ci环境变量VERSION值,使gitlab Runner同时在操作系统windows和linux上运行? 我需要一些通用的解决方案,以便它在两个操作系统上都能工作

这是我的.gitlab-ci.yml

stages:
  - versioning

variables:
  VERSION: ""

versioning:
  stage: versioning
  script:
  - echo "[versioning] ..."
  - python ./ci-cd_scripts/get_version.py
  - echo $VERSION

这是我的./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)

python output in pipeline log


Tags: pyechocigetosversiongitlabenviron
3条回答

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

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}"')

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

script:
  - ./ci-cd_scripts/get_version.py
  - source .env
  - echo $VERSION

这通常是不可能的

您可以在Python脚本中使用os.environ设置和修改环境变量,但当脚本完成时,所有内容都返回到以前的值

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

Why can't environmental variables set in python persist?
How do I make environment variable changes stick in Python?
Environment Variables in Python on Linux

修改get_version.pypython脚本,使其具有:

#!/usr/bin/python3

print("export VERSION='{}'".format(value))

然后在你的管道中:

script:
  - eval `python ./ci-cd_scripts/get_version.py`
  - echo $VERSION

相关问题 更多 >