我在 GitLab 中设置版本控制管道时遇到问题。 我的目标是什么:
version.py
并且有 version
变量保存版本号)我取得的成就:
我遇到的问题:
管道:
version-job:
stage: version
variables:
VERSION_FILE_PATH: "<path-to-version-file>"
image: <custom-image>
script:
- python3 /version_app/main.py
rules:
- if: $CI_COMMIT_BRANCH== "main"
tags:
- <runner-tag>
版本控制功能:
def update_version_in_file(file_path, version):
if not os.path.exists(file_path):
logger.warning(f"Unable to write version to file. File path '{file_path}' does not exist")
return
logger.info(f"Updating version in file to: {version}")
with open(file_path,"r+", encoding="utf-8") as v:
tree = ast.parse(v.read())
updater = VersionUpdater(version)
tree = updater.visit(tree)
v.seek(0)
v.write(astor.to_source(tree))
git("add",file_path)
git("commit","-m",f"File version update {version}")
def main():
version = func_to_get_version()
git("config","http.sslCAInfo",CERTIFICATE_PATH)
git("config","user.email","<...>")
git("config","user.name","<...>")
version_file_path = os.environ.get("VERSION_FILE_PATH","./app/version.py")
update_version_in_file(version_file_path,version)
tag_repo(version)
git("push", "origin", version)
return 0
系统应该根据到最后一个 git 标签的距离生成一个版本。因此,在版本作业(python)中,像
这样的命令git describe --tags --always --long
应该被执行,它将返回提交的最后一个标签,就像
v0.1.1-2-g2156f2b
其中
v0.1.1
是标签,2156f2b
是短提交 sha。现在我们将$CI_COMMIT_SHORT_SHA
(分支中的最后一次提交)与短提交进行比较,如果有差异,我们将更新版本文件并创建标签。如果没有,我们成功退出。