We want to set up a continuous integration (CI) service for our project. That CI service should control all aspects of the project life, including deployment.
That is, we want a CI agent at each iteration to take a clean system (specifically Ubuntu Server), deploy our project there and run tests.
We probably would write CI service ourselves, from scratch, as our ecosystem is rather unusual. The question is: how to effectively provide clean slate system for each CI iteration?
Project deployment install a few Debian packages, configures several nginx sites, and also install some packages in a implementation language-specific package manager (LuaRocks), systemwide. Nothing more intrusive than that (I believe). So, it is more important to be able to set up a clean slate fast (within a minute on modern hardware, faster — better) than to ensure absolute isolation and cleanness.
I see two ways how to do what we need:
- Either set up a jail of some kind (like lxc, maybe).
- Or install some virtual machine that can do snapshots, and use them.
But at this point I do not have enough information to decide.
What would you advise? Any other options? Any specific tool names?
Note: The CI service would be run inside a Citrix XenServer guest. Paid solutions are OK if prices are reasonable. (Usually they are not reasonable in this field.) Remote CI solutions not OK.