Continuous Integration Box
CIBox - is Ansible based system for deployment environment for web application development. With this tool you able to deploy local web-server based on Vagrant and/or remote one.
The power of the system - simplicity. All provisioning is the same for local and remote machines, except logic for installing additional software on remote (Jenkins, for example), but it quite simple too (just when: not vagrant
as condition for Ansible tasks).
Currently based on Ubuntu 14.04 LTS (64bit)
.
██████╗ ██╗ ██████╗ ██████╗ ██╗ ██╗
██╔════╝ ██║ ██╔══██╗ ██╔═══██╗ ╚██╗██╔╝
██║ ██║ ██████╔╝ ██║ ██║ ╚███╔╝
██║ ██║ ██╔══██╗ ██║ ██║ ██╔██╗
╚██████╗ ██║ ██████╔╝ ╚██████╔╝ ██╔╝ ██╗
╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
Main possibilities
- Create matrix of virtual servers (droplets).
- Automated builds for every commit in a pull request on GitHub (private repositories supported).
- Multi CMS/CMF support. To add support of a new one, you just need to put pre-configurations to
cmf/<NAME>/<MAJOR_VERSION>
and ensure that core files can be downloaded via Git. - Opportunity to keep multiple projects on the same CI server.
- Triggering builds via comments in pull requests.
- Midnight server cleaning :)
Quick Start
- Add your host credentials to the
inventory
file. ./cibox repository --project=<NAME> [--cmf=drupal] [--version=7.43] [--host=https://github.com] [--vendor=drupal] [--without-sources]
./cibox provision --project=<NAME> [--limit=<HOST>]
The --without-sources
option for repository
task affected on downloading CMF sources. If you want to create an empty project - use it.
Examples
Drupal 7 (standard system):
./cibox repository --project=test
WordPress 4 (supported system):
./cibox repository --project=test --cmf=wordpress --version=4.5
Add Jenkins project to existing CI server:
./cibox jenkins-job --project=test [--limit=<HOST>]
Note: this command should be executed on your host, not inside of virtual machine!
Variations
Currently provision.yml
playbook powered with tags, so you can run only part of it.
./cibox provision --tags=TAGNAME
- php-stack
- solr
- jenkins
- composer
- pear
- drush
- xhprof
- sniffers
- apache
- mysql
- swap
- ssl-config
For provisioning Vagrant you also able to specify tags:
ANSIBLE_ARGS="--tags=TAGNAME" vagrant provision
As you see, any set of arguments can be passed for ansible-playbook
command.
cibox
utility
The power of Run with custom inventory file:
ANSIBLE_INVENTORY="/path/to/inventory" ./cibox
Run with custom set of arguments:
ANSIBLE_ARGS="-vvvv" ./cibox
By default, cibox
- is a global utility which looks for a project in /var/www/
. But, if you specify a playbook outside of this directory, then working folder will be the path of this playbook.
Dependencies
On your host machine you should have the following software:
Name | Version |
---|---|
Vagrant | 1.7+ |
Ansible | 2.0+ |
VirtualBox | 4.0+ |