Docker image with Jenkins CI and full PHP configuration and tools

See it in action here.

Get the source from Github here.

This Docker image follows the configuration for installing Jenkins CI and the PHP testing tools.

It uses Ubuntu 14.04 LTS image.

The PHP 5.5 PPA by Ondřej Surý is used for the latest version of PHP and its extensions.

For Jenkins the Debian deb repo is used.

The deb is used for faster local updating/downloading of the apt packages.

DEBIAN_FRONTEND=noninteractive and apt-get -qq are used for automatic silent installs.

date.timezone=Europe/Sofia and ;disable_functions= are set in php.ini

After Jenkins is installed and needs its first update there is a wait of 60 seconds until the update script is called.

The Jenkins server is first updated before installing the plugins.

Currently these plugins are installed: checkstyle cloverphp crap4j dry htmlpublisher jdepend plot pmd violations xunit.

And these PHP testing tools are installed globally through Composer: phpunit/phpunit, squizlabs/php_codesniffer, phploc/phploc, pdepend/pdepend, phpmd/phpmd, sebastian/phpcpd, theseer/phpdox.

Composer installs the tools in /home/jenkins/.composer and makes all of them available globally in /usr/local/bin/.

Composer is set to use git to fetch the dependencies to avoid the GitHub API rate limits.

Port 8080 is exposed and available. This is the default Jenkins’ port.

The default CMD in the image is: “sh /”


First download the image:

docker pull iliyan/jenkins-ci-php:1.0.0

And run it:


docker run -d --name jenkins -p localhost:8080:8080 iliyan/jenkins-ci-php:1.0.0

Visible from outside on a hosting server:

docker run -d --name jenkins -p VISIBLESERVERPORT:8080 iliyan/jenkins-ci-php:1.0.0

Alternative usage of the PHP testing tools:

You can download all of the tools from your project’s composer.json file adding them for example in the dev secion like I did here and here.

Using multiple remote repositories with Git | David Murphy

Something I am using for some of my projects:

Using multiple remote repositories with Git | David Murphy.

Still most of the time I prefer to use a private GitLab repo until I decide I can show the modifications to the world on GitHub.

Ignoring files · GitHub Help

Sometimes I need to have a different app configuration when running the same app under different environments.

The best way for me while working both with a local Vagrant configuration and a custom configured production environments is to use:

git update-index --assume-unchanged path/to/file.txt

The full information can be found here: Ignoring files · GitHub Help.

Don’t put the config files in .gitignore, just change them locally and update-index. If there is a newer version of the file coming from the remote repo, you will be notified and will not miss update.