First off, Travis CI is only usable through github. It’s a great service that allows tests to be run before pull requests are merged, helping to ensure code stability. It’s a very new service, and PHP support is in flux. Almost daily information changes. So I fear this will be outdated tomorrow. Regardless, I wanted to get this written down.
The magic all happens in the .travis.yml file. It’s a config file that tells travis what to run. It only has a few sections, but they can be tricky. Here is the example .travis.yml for PHP:
language: php # list any PHP version you want to test against php: # using major version aliases # aliased to 5.2.17 - 5.2 # aliased to a recent 5.3.x version - 5.3 # aliased to a recent 5.4.x version - 5.4 # optionally specify a list of environments, for example to test different RDBMS env: - DB=mysql - DB=pgsql # execute any number of scripts before the test run, custom env's are available as variables before_script: - if [[ "$DB" == "pgsql" ]]; then psql -c "DROP DATABASE IF EXISTS hello_world_test;" -U postgres; fi - if [[ "$DB" == "pgsql" ]]; then psql -c "create database hello_world_test;" -U postgres; fi - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS hello_world_test;" -uroot; fi # omitting "script:" will default to phpunit # use the $DB env variable to determine the phpunit.xml to use script: phpunit --configuration phpunit_$DB.xml --coverage-text # configure notifications (email, IRC, campfire etc) notifications: irc: "irc.freenode.org#travis"
Not included libs
Currently this will not work. Their phpunit is requiring libraries that aren’t included in the vm that’s created. Regardless of if your project is using these libraries:
before_script: # everything after this point is needed to just use phpunit - pear channel-discover pear.phpunit.de - pear install phpunit/PHP_Invoker - pear install phpunit/DbUnit - pear install phpunit/PHPUnit_Selenium - pear install phpunit/PHPUnit_Story
Database usage
I use mysql currently. The problem I hit was you can create users, but you can’t grant them privilages. So you HAVE to use the default root user with no password.
env: - DB=mysql # execute any number of scripts before the test run, custom env's are available as variables before_script: - mysql -e 'CREATE DATABASE `quizmo_dev`;' # The following is fine, but travis won't allow granting privilages # - mysql -e "CREATE USER 'quizmo_dev'@'localhost' IDENTIFIED BY 'quizmo_dev';" # - mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'quizmo_dev'@'localhost' WITH GRANT OPTION;" # migrating adds all tables - quizmo/protected/yiic migrate --interactive=0
Notifications don’t work
I’m assuming this is something they’ll fix soon. I’m just trying to use email notifications — but it never sends an email.