如何在 Gitlab 中正确设置版本控制管道

问题描述 投票:0回答:1

我在 GitLab 中设置版本控制管道时遇到问题。 我的目标是什么:

  • 当它被推送到主分支(通过提交或MR)时,带有版本号的标签将被添加到提交中
  • 还将版本号添加到存储库内的文件中(类似于
    version.py
    并且有
    version
    变量保存版本号)

我取得的成就:

  • 第一部分 - 我有工作管道,在 CI_COMMIT_BRANCH == main 时运行。它创建版本标签并将其推送到远程

我遇到的问题:

  • 我不知道何时以及如何正确更新文件中的版本号(我知道如何在技术上做到这一点,我可以更新文件中的版本号,我不知道如何正确地将其推送到存储库,所以当下一个作业运行时它就在那里)。

管道:

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
python git gitlab gitlab-ci
1个回答
0
投票

系统应该根据到最后一个 git 标签的距离生成一个版本。因此,在版本作业(python)中,像

这样的命令
git describe --tags --always --long

应该被执行,它将返回提交的最后一个标签,就像

v0.1.1-2-g2156f2b

其中

v0.1.1
是标签,
2156f2b
是短提交 sha。现在我们将
$CI_COMMIT_SHORT_SHA
(分支中的最后一次提交)与短提交进行比较,如果有差异,我们将更新版本文件并创建标签。如果没有,我们成功退出。

© www.soinside.com 2019 - 2024. All rights reserved.