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

python tox,创建rpm virtualenv,作为ci管道的一部分,不确定工作流中的位置,python,jenkins,packaging,tox,Python,Jenkins,Packaging,Tox,我正在研究Python应用程序如何也可以使用CI管道,但我不确定如何创建标准工作流 Jenkins用于进行初始存储库克隆,然后启动tox。基本上,这就是maven和/或msbuild获取依赖项包并生成的地方。。。。哪种毒物是通过pip进行的,所以这一切都很好 但是现在对于令人困惑的部分,管道的最后一部分是创建和上传包。开发人员可能会将创建的包上载到本地pip存储库,但也可能会创建一个部署包。在这种情况下,它需要是一个包含应用程序virtualenv的RPM。我已经使用rpmvenev手动创建了一

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

Jenkins用于进行初始存储库克隆,然后启动tox。基本上,这就是maven和/或msbuild获取依赖项包并生成的地方。。。。哪种毒物是通过pip进行的,所以这一切都很好


但是现在对于令人困惑的部分,管道的最后一部分是创建和上传包。开发人员可能会将创建的包上载到本地pip存储库,但也可能会创建一个部署包。在这种情况下,它需要是一个包含应用程序virtualenv的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以及量角器和jasmine测试)
  • 如果tox步骤恢复正常,则启动另一个docker容器来构建deb包
  • 把deb包推到S3,让我们来处理告诉那些机器更新的问题
deb包也只是一个构建工件,类似于Jenkins 1.x所做的。一旦我们准备好进入staging,我们只需获取该包并手动将其升级到staging debian repo。同样,将其滚动到prod

我发现这些工具对所有这些都很有用:

  • 因为它是Python的,所以我们更容易处理,但Jenkins也可以。无论如何,这是整个管道的控制器
  • Docker,因为每个构建都应该与其他构建完全隔离
  • 让光荣的试跑者来处理所有这些细节
  • 构建包。RPM,DEB,tar.gz,随便什么。非常可配置且易于编写脚本
  • 使管理debian存储库变得更容易,尤其是将其升级到S3

虽然我非常同意使用不同的工具,但我不能使用build bot。因为这将是在CI中对开发人员管道进行硬编码,所以这并不是要找到任何可能的方法来进行CI。。。而是寻找一种完全分离的方式,Maven/MSBuild为开发人员提供管道能力的方式。你的方法对于一个小型的er组织来说听起来非常可行,但我的情况是,团队之间由于组织的扩张而非常分散。与其他人在CI端的管道一样,是一个源克隆,build tool start,其余在source中的devs上。使用Jenkins,您可以使用管道插件在repo中保留一个Jenkins文件,该文件以编程方式定义管道。