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

J. *_*ker 8 python packaging jenkins tox

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

Jenkins用于执行初始存储库克隆,然后启动tox.基本上这是maven和/或msbuild将获得依赖包和构建.... tox通过pip做的地方,所以这里都很好.

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

Pau*_*aul 2

我喜欢用 Unix 哲学来解决这个问题。拥有一个可以将一件事做得非常出色的工具,然后将其他工具组合在一起。Tox 是专门为在一堆不同的 python 环境中运行测试而构建的,因此使用它来为你构建 deb / rpm / 等我觉得有点滥用该工具。使用 tox 来运行所有测试可能更容易,然后根据结果在管道中执行另一个步骤来为刚刚测试的内容构建包。

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

我们在工作中所做的是

  • AWS 中的 Buildbot 在 PR 上接收来自 Github 的推送通知
  • 这会启动一个 docker 容器,该容器会拉入当前代码并运行 Tox(py.test、flake8 以及 Protractor 和 jasmine 测试)
  • 如果 tox 步骤恢复正常,则启动另一个 docker 容器来构建 deb 包
  • 将 deb 包推送到 S3,并让Salt处理告诉这些机器进行更新

该 deb 包也可以作为构建工件使用,类似于 Jenkins 1.x 的做法。一旦我们准备好进行登台,我们只需将该软件包手动升级到登台 debian 存储库即可。将其滚动到产品中也是如此。

我发现对这一切有用的工具:

  • Buildbot因为它是用 Python 编写的,所以我们更容易使用,但 Jenkins 也可以工作。无论如何,这是整个管道的控制器
  • Docker 因为每个构建都应该与其他构建完全隔离
  • 毒害光荣的测试运行者来处理所有这些细节
  • fpm构建包。RPM、DEB、tar.gz 等等。非常可配置且易于编写脚本。
  • Aptly使管理 Debian 存储库变得容易,特别是将它们推送到 S3。