This article is about Codeship Basic.

Using PHP In CI/CD with Codeship Basic

Estimated Reading Time: 5 mins

Versions And Setup

We use PHPENV to manage PHP versions. We currently have 5.3, 5.4, 5.5, 5.6, 7.0 and 7.1 installed. These are aliases that are pointing to the specific 5.x.x and 7.x.x versions we have installed.

For a full list of installed versions (including patch level versions) open a SSH debug build and run the following command

phpenv versions

Ubuntu 14.04

By default we use 5.5

Specific versions: 5.3.29, 5.4.45, 5.5.38, 5.6.29, 7.0.14 and 7.1.0

Do not rely on the specific versions we have as this can change any time and could break your build.

You can change the version you want to use by running phpenv local PHP_VERSION in your setup commands. For example

phpenv local 5.5

PHP.ini

You can access and change the php.ini file in

/home/rof/.phpenv/versions/$(phpenv version-name)/etc/php.ini

phpenv Rehashing

If you install a new executable through a pear package make sure to run

phpenv rehash

so phpenv is aware of the new executable and sets it up correctly

Dependencies

You can install dependencies through pear and composer in your setup commands.

For example:

composer install

Dependency Cache

If you want cache composer dependencies during builds, please add the following environment variable to your build configuration.

COMPOSER_HOME=${HOME}/cache/composer

To make sure that the dependency cache is used by all of your dependencies, please call composer via the following snippet.

composer install --prefer-dist  --no-interaction

Extensions

Extensions can be installed through pecl. If you need any other tools or are having trouble getting an extension to build, please send us a message.

xdebug

By default xdebug is installed and enabled on the build VMs. If you want to remove it, add the following command to your builds.

rm -f /home/rof/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini

Pear

pear install pear/PHP_CodeSniffer

Composer

composer install --no-interaction

Pecl

pecl install -f memcache

GitHub API

To speed up Composer you can install packages from dist by replacing --prefer-source with --prefer-dist. However as GitHub’s API is rate limited, you then might see errors similar to this:

- Installing phpunit/phpunit (3.7.37)
Downloading: connection... Failed to download phpunit/phpunit from dist: Could not authenticate against github.com`
Now trying to download from source

To avoid this create a new personal access token on GitHub. For the description you can use something like Codeship Composer and you can unselect all scopes. Copy your personal access token and add it to the environment variables in your Codeship project settings (on the Environment page) as GITHUB_ACCESS_TOKEN.

Then use the following Setup Commands in your Codeship project settings:

composer config -g github-oauth.github.com $GITHUB_ACCESS_TOKEN
composer install --prefer-dist --no-interaction

Notes And Known Issues

Due to PHP version issues, you may find it helpful to tests your commands with different versions via an SSH debug session if tests are running differently on Codeship compared to your local machine.

Running your PHP Server

If you want to test against a running PHP Server you can use the builtin one to start a server in the current directory. It will serve files from this directory.

nohup bash -c "php -S 127.0.0.1:8000 2>&1 &" && sleep 1; cat nohup.out

You can access it in your tests on 127.0.0.1:8000.

Also take a look at the PHP built-in webserver docs in the PHP documentation

Thanks to Jeff Donios for the tip.

Exiting Tests

All commands must return an exit code 0 to Codeship to report a successful result, or any other error code to report an unsuccessful result. This means you must configure your test scripts to exit with a 0 status if they do not do so by default.

Frameworks And Testing

Codeship supports essentially all popular PHP frameworks, such as Laravel, Symfony, CodeIgniter and CakePHP. All frameworks that do not require root access for custom machine configuration should work without issue.

Additionally, all testing frameworks, such as phpunit and codeception, will work on Codeship.

Custom PHPUnit Version

Note that if you need to install a custom versin of PHPUnit, you can do so with the following commands:

composer global remove phpunit/phpunit
composer global require phpunit/phpunit:5.*

Parallelization

In addition to parallelizing your tests explicitly via parallel pipelines, some customers have found using the paratest module is a great way to speed up your tests.

Note that we do not officially support or integrate with this module and that it is possible for this to cause resource and build failure issues, as well.

Need More Help?

Get in touch if you need more help, or post on Stack Overflow using the tag #Codeship.

  • Ask The Helpdesk A Question
  • Code Examples And Sample Projects
    • Was This Article Helpful?