使用composer进行持续集成

rj_*_*ijl 14 php jenkins composer-php

我有一个PHP项目,我通过Composer加载包.我还在专用的CI服务器上使用Jenkins运行Continious Integration.每隔一小时,Jenkins就会在我的存储库中查询更改,如果存在,则执行测试运行.

testrun的第一步是使用Phing对存储库进行全新检查,并执行应用程序的构建.构建的一个步骤是执行

composer install
Run Code Online (Sandbox Code Playgroud)

由于Jenkins总是使用全新的签出,因此即使自上次运行以来没有更改任何包,作曲家将始终在每次测试运行时获取所有包.这有几个缺点:

  • 完成测试运行需要相对较长的时间(编写器需要获取例如Zend Framework,它相当大
  • 如果每小时提取新包,它会对packagist服务器造成不必要的压力
  • 如果由于某种原因,作曲家安装失败,我的测试运行也会失败.

我在考虑将组合器提取的包存储在CI服务器的中心位置,因此Jenkins可以在每次测试运行时访问该位置的包.当然,现在我必须重写部分应用程序来处理供应商文件夹在CI服务器上时位于不同位置的事实.其次,我必须告诉Jenkins跟踪composer.lock文件的变化,看看他是否还需要运行composer.我担心这两件事都不是真的微不足道.

有没有人对其他/更好的方法有任何建议,或者它是在每次测试运行时通过composer获取所有包的最佳选择.最重要的是,它是确保您始终使用正确包装的最佳方式,但它有点浪费带宽,当然在开发的后期阶段,当包装列表几乎不会改变时.

Sel*_*aek 5

加速它的一种方法是使用composer install --prefer-dist即使对于开发包也只下载拉链.这是唯一构建的首选,因为它会跳过项目的整个历史记录.

至于sparing packagist,不要太担心,与每次提交时在travis上构建的所有开源库相比,每小时一次构建不会产生巨大的差异.


Jak*_*las 4

您可以做的一件事是将供应商存储在詹金斯项目工作区之外的位置,以便它保留在构建之间。您不一定需要更改您的应用程序。只需更新构建脚本,以便它创建到供应商位置的符号链接。

我使用 capifony 进行部署,它使用这种方法来保持供应商之间的发布。