python tox,创建rpm virtualenv,作为ci管道的一部分,不确定工作流中的位置

杰姆·贝克尔

我正在研究Python应用程序也可以如何使用CI管道,但是我不确定如何创建标准工作流程。

Jenkins用于进行初始存储库克隆,然后启动tox。基本上,这是maven和/或msbuild可以获取依赖包并进行构建的地方……。tox通过pip来完成,因此在这里一切都很好。

但是,对于令人困惑的部分,管道的最后一部分是创建和上传软件包。开发人员可能会将创建的程序包上载到本地pip存储库,然后可能还会创建部署程序包。在这种情况下,它将需要是一个包含应用程序虚拟环境的RPM。我已经使用rpmvenev手动制作了一个,但是不管它是如何制作的,如何将这样的步骤添加到tox配置中?在rpmvenv的情况下,它会创建自己的virtualenv,可以这么说是一个自包含的命令。

保罗

对于这个问题,我喜欢采用Unix哲学。拥有一个可以出色地完成一件事情的工具,然后将其他工具组合在一起。Tox的目的是在一系列不同的python环境中运行测试,因此使用它来为您构建deb / rpm / etc等,我觉得这是对该工具的误用。仅使用tox来运行所有测试可能会更容易,然后根据结果在您的管道中又迈出了一步,即为刚刚测试的内容构建程序包。

Jenkins 2.x在撰写本文时相当新,似乎在构建管道方面要好得多。BuildBot正在经历大量的开发,并且已经相当容易为此建立良好的管道。

我们在工作中所做的是

  • AWS中的Buildbot,可从PR的Github接收推送通知
  • 这将启动一个docker容器,该容器插入当前代码并运行Tox(py.test,flake8以及量角器和茉莉花测试)
  • 如果毒素步骤恢复正常,请启动另一个Docker容器以构建一个deb包
  • 将这个deb程序包推到S3,然后让Salt处理告诉这些机器更新

该deb包也可以作为构建工件使用,类似于Jenkins 1.x所做的事情。一旦准备好进行登台,我们只需获取该软件包并将其手动升级到登台的debian repo。同上,将其滚动到产品。

我发现所有这些有用的工具:

  • Buildbot,因为它在Python中,因此我们可以更轻松地进行工作,但Jenkins也可以工作。无论如何,这是整个管道的控制器
  • Docker,因为每个构建都应该与其他所有构建完全隔离
  • 毒打光荣的测试跑步者以处理所有这些细节
  • fpm构建软件包。RPM,DEB,tar.gz等。高度可配置且易于编写脚本。
  • 借助Aptly,可以轻松管理debian存储库,尤其是将它们推向S3。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过aws cli调用python脚本作为EC2集群工作流程的一部分执行?

Python - 如何根据字符串的一部分从字符串列表中创建子列表?

如何在不创建新列表的情况下在Python中获得列表的一部分?

如何计算在Python中作为列表一部分的集合的出现次数?

返回我将鼠标位置与 python 中的坐标匹配的列表的一部分

在Python中获取整数的一部分

在python中获得字典的一部分

在python中交换列表的一部分

在Python中缩小图像的一部分

在python中编辑图像的一部分

拆分并从列值中取出一部分字符串,然后在 Pandas python 中创建新列

以及以独立工作方式将Python导入模块作为包的一部分

如何确定模块名称是否为python标准库的一部分

Python 3确定“或”操作的哪一部分是正确的

使用GIT在TFS 2015中提交更改/创建标签,作为构建过程的一部分

我将如何为作为 cloudant nosql 中数组一部分的元素创建索引?

不删除行作为函数的一部分-python

Python-使用变量作为字符串格式的一部分

python asyncio.gather使用输入作为返回值的一部分

作为我提交给Slurm的一部分,如何激活特定的Python环境?

单引号作为Python列表元素的一部分

Python 使用字符串值作为类/代码的一部分

禁用用户/组创建/删除,这是sbt本机打包程序rpm安装的一部分

RPM数据库看不到作为RPM一部分安装的文件

Python识别字符串的一部分(位置和长度)

Python 3:使用列表的一部分和标准部分制作变量,然后将该变量关联到新创建的列表

使用方程式作为视图创建的一部分

TextInputEditText 在作为弹出窗口的一部分创建时消失

iTunes Connect:如何创建Bundle ID作为其他团队的一部分?