GitLab CI 凹凸 Python 包版本

2024-01-08

我想知道是否可以在 gitlab ci runner 中更改存储在 gitlab 中的 Python 包版本。

我有示例包结构:

/package
  /src
    /__init__.py
     main.py
  setup.py
  Dockerfile
  .gitlab-ci.yml

init.py 包括:

  __version__ = '1.0.0'

setup.py 包括:

  setup(
        name='foo',
        version=src.__version__,
        packages=find_packages(),
        install_required=[foo, bar]
  )

碰撞和释放的简单工作流程如下所示:在 github 和 pypi 上发布新的 python 包版本的最佳工作流程和实践 https://stackoverflow.com/questions/53122766/best-workflow-and-practices-for-releasing-a-new-python-package-version-on-github

但是我们可以自动在 __init_.py 中修改版本,同时直接在 gitlab-ci 中发布吗?


我喜欢为此使用凹凸2版本包。

这是我的 gitlab-ci.yml ,其中包含(几乎)最低限度的设置:

image: python:latest

# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/reference/pip_install/#caching
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
cache:
  paths:
    - .cache/pip
    - venv/

before_script:
  - python --version
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
  - pip install -r requirements.txt

stages:
  - build
  - release

upload package:
  stage: release
  script:
    - pip install twine bump2version
    - bump2version --tag release
    - python setup.py sdist bdist_wheel
    - TWINE_PASSWORD=${PYPI_TOKEN} TWINE_USERNAME=__token__ python -m twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
    # Necessary to avoid a bug corrupting the version in setup.py. Just in case it's forgotten to do manually. Now we only have to explicitly bump version for major or minors.
    - bump2version patch
    - git config --global user.email "${GITLAB_USER_EMAIL}"
    - git config --global user.name "${GITLAB_USER_NAME}"
    - git remote set-url origin "https://gitlab-ci-token:${MY_PUSH_TOKEN}@gitlab.com/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}.git"
    - git push -o ci.skip --tags origin HEAD:${CI_COMMIT_REF_NAME}
  artifacts:
    paths:
      - dist/*.whl
  only:
    - master

我也有一个.bumpversion.cfg在我的项目的根目录中的文件中包含以下内容:

[bumpversion]
commit = True
tag = False
current_version = 0.1.0-dev0
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\-(?P<release>[a-z]+)(?P<build>\d+))?
serialize = 
    {major}.{minor}.{patch}-{release}{build}
    {major}.{minor}.{patch}

[bumpversion:file:setup.py]

[bumpversion:part:build]

[bumpversion:part:release]
optional_value = gamma
values = 
    dev
    gamma

使用两个自定义变量。需要将它们添加到存储库设置中的 CI 变量中。如果您想在不受保护的分支上使用它们,请确保取消选中受保护的检查。

  • MY_PUSH_TOKEN- 这是在我的个人资料中创建的个人访问令牌。它具有 read_repository 和 write_repository 权限。 我是这个存储库的所有者/维护者,因此它授予推送这个存储库的权限。

  • PYPI_TOKEN- 可选,需要将包推送到 pypi.org。

最后但并非最不重要的一点,值得一提的是:

  • 上面的示例使用位于组中的存储库,如果您有一个不在组内的存储库,则可能需要更改 set-url 原始地址。

  • The -o ci.skip参数阻止构建管道触发循环

Usage:

  • 创建功能分支
  • 推送代码
  • 创建合并请求
  • 合并 MR 到 master

ci 工作负责打包、发布、上传和跳转到下一个补丁。

要更改主要或次要功能,请在功能分支中本地从命令行手动调用它并推送它。

凹凸2版本工具也会自动处理标记。

我用来获得此解决方案的一些资源:

  • https://medium.com/@tishkov.pavel/autotagging-in-gitlab-step-by-step-guide-c3a8dd47087a https://medium.com/@tishkov.pavel/autotagging-in-gitlab-step-by-step-guide-c3a8dd47087a- 让 git 在 ci 中工作。
  • https://williamhayes.medium.com/versioning-using-bumpversion-4d13c914e9b8 https://williamhayes.medium.com/versioning-using-bumpversion-4d13c914e9b8- 帮助我更好地理解bump2version
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab CI 凹凸 Python 包版本 的相关文章

随机推荐

  • 如何在一个 LINQ 请求中使用两个不同的数据上下文?

    任何人都可以帮助我解决下一个问题 如何在一个 LINQ 请求中使用两个不同的数据上下文 using var db new DataMapDataContext Connection using var dbAdd new DataMapDa
  • 将两个选择语句合并在两列中?

    我有两个选择语句 1 select Start Date from table1 where Start Date not in select End Date from table1 2 select End Date from tabl
  • ValueError: Tensor Tensor(...) 不是该图的元素。使用全局变量keras模型时

    我正在使用 Flask 运行一个 Web 服务器 当我尝试使用 vgg16 这是 keras 预训练的 VGG16 模型的全局变量 时 会出现错误 我不知道为什么会出现这个错误 也不知道它是否与 Tensorflow 后端有关 这是我的代码
  • 从文件中提取两个模式之间的行[重复]

    这个问题在这里已经有答案了 我需要从一个巨大的文件中提取两个匹配模式之间的特定行 比方说pattern1 在文件中唯一 匹配特定的line n and pattern2 文件中不唯一 匹配line m之后的下一个紧接着的比赛line n 然
  • 单击按钮打开模式

    下一个代码使用 Modal React 组件 export class AddWorkLogEditor extends React Component constructor props super props this addWorkL
  • 如何理解EXC_BAC_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS日志?

    我正在用 Titanium 为 Android 和 IOS 开发一个应用程序 当我在应用程序中进行大量导航时 我会遇到随机异常并且应用程序崩溃 我怎样才能知道问题出在哪里 该应用程序解释起来有点复杂 它有两个窗口 第一个窗口用于 主 视图
  • 如何在不指定宽度的情况下并排浮动两个 div?

    我有两个 div 第一个内容不多 第二个内容很多 我希望它们并排浮动 以便第一个 div 仅与文本一样宽 第二个 div 填充剩余的水平空间 而且 我不想指定固定宽度 这是使用表格所需的外观 http jsfiddle net enRkR
  • 获取笔记本中 Bokeh 的选择

    我想选择绘图上的一些点 例如来自box select or lasso select 并在 Jupyter 笔记本中检索它们以进行进一步的数据探索 我怎样才能做到这一点 例如 在下面的代码中 如何将 Bokeh 中的选区导出到笔记本 如果我
  • 如何将 Vue VNode 渲染为字符串

    我正在尝试在我的 Vue 组件中使用 CSS 掩码 我需要完成实施toSvg下面的函数 这将渲染来自的 Vue VNodethis slots default到 SVG 字符串
  • 使用 Spark 和 scala 编写 CSV 文件 - 空引号而不是 Null 值

    我正在使用 Spark 2 4 1 和 scala 并尝试将 DF 写入 csv 文件 似乎在空值的情况下 csv 包含 是否可以删除那些空引号 val data Seq Row 1 a Row 5 z Row 5 null val sch
  • php数据库的最佳选择[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ember.js:如何基于assets/vendor-*.js进行调试

    这是一个更普遍的问题 但我想其他人也遇到过这个问题 例如参见这个SO问题 Ember js 如何分析vendor js中的错误 https stackoverflow com questions 31273979 ember js how
  • 安卓FTP服务器

    我正在使用以下code http code google com p simpleftp source browse trunk src com googlecode simpleftp FTPServer java r 4使 Androi
  • Mongoose findOne 带有“非此即彼”查询[重复]

    这个问题在这里已经有答案了 我有一个 Mongo 用户数据库 正在使用 Mongoose 查询 我想做 findOne 来确定用户是否已经存在 我希望它首先搜索用户是否已存在带有电子邮件的用户 如果不存在 则应该搜索是否存在带有电话的用户
  • 使用 powershell 部署到 azure 函数

    有什么办法可以使用 powershell 脚本部署到 azure 函数吗 CI 不适用于我们 因为我们使用 octopus 部署来部署到我们所有的生产服务 因此 如果有一种方法可以使用 powershell 脚本进行部署 那将是有益的 Th
  • 不支持实时更新include_values

    我想更新 callback url https graph facebook com subscriptions 但问题是我无法添加 include values 这是一个非常大的问题 因为我的整个程序都与 错误 message 不支持 1
  • Facebook user_id 作为 MongoDB BSON ObjectId?

    我正在重建脸书上的恋人 http www facebook com loversapp与 Sinatra 和 Redis 一起 我喜欢 Redis 因为它没有很长的 12 字节 BSON 对象 ID http www mongodb org
  • JavaScript 正则表达式:查找非数字字符

    假设我有这两个字符串 5 15 1983 和 1983 05 15 假设字符串中的所有字符都是数字 除了可以出现在字符串中任何位置的 分隔符 字符 只有一个分隔符 字符串中任何给定非数字字符的所有实例都将是相同的 如何使用正则表达式提取该字
  • Android:注册新的电信 PhoneAccount

    我正在尝试做一个新的电话帐户 http developer android com reference android telecom PhoneAccount html使用我的实现连接服务 http developer android c
  • GitLab CI 凹凸 Python 包版本

    我想知道是否可以在 gitlab ci runner 中更改存储在 gitlab 中的 Python 包版本 我有示例包结构 package src init py main py setup py Dockerfile gitlab ci