Continuous integration for PHP projects is definitely a thorny subject, from my point of view. Why? Because the vast majority of continuous integration tools have a few drawbacks:
- they are behemots: consider Jenkins CI and/or its parent Hudson. Designed in Java, for huge Java projects, they are resource hungry apps.
- they were designed for Java: configuration built around ant which makes sense for Java, but in PHP it means you're using a high level tool to run command line scripts. The XML structure isn't helping, being rather complex even for simple scripts.
- needsly slow & complex UI: in PHP the needs are simple - pull from remote, run tests/check code/mess detector, put results into code review - but the UI's are much more complex and sometimes force you into setting pointless defaults for stuff you don't want
- slow: much of the above also translates into slow.
- it's light: just a few kb of code that runs in a webserver you're likely to already have if you're a web developer. Yes, PHPCI is written in PHP and runs in NginX or Apache (Nginx recommended).
- designed for PHP: has all the required plugins for PHP development and the configuration is simple YML (parser borrowed from Symfony2).
- fast: minimal system requirements, very light and functional UI, even generates SSH keys to use in Bitbucket/Github or others.
Of course, it's not perfect:
- lacks integration with some code review tools (like Gerrit)
- though you can easily pull various tools via composer, it's still better to install them via pear
- poor documentation (especially for configuration options)
- to automatically start builds you need to manually create scripts and configure cron jobs (I like it but it hampers quick deployment).