I lost count on how many times I had to setup a CI server. Being a big fan of the
concept of "Infrastructure as Code" as I am, I promised myself that the next time I'd do it differently (I needed to have it automated!).
Well, the day has come.The stack (using Cloudformation terms) I decided to create is composed by a basic Jenkins installation (standalone + winstone) running as a daemon on an Amazon Linux based EC2 intance. It also includes Nginx as a reverse proxy and a dedicated volume for storing the JENKINS_HOME files and other artifacts.
Obviously that a much easier, simpler and (I think) even cheaper alternative would be using some
PaaS offering (Jenkins as a Service).
However, I ended up using
AWS Cloudformation to automate the provisioning of the AWS Resources (IAM User, SecurityGroup, EBS Volumes, EC2 instance) and its
cloud-init features to install and configure the necessary packages.
External repository addition, yum based package installations, configuration files adjustments, EBS volumes setup, etc. Most of the installation and configuration logic is in a shell script embedded in the UserData property.
The
resulting template is right below, the input parameters are:
Instance type, JENKINS_HOME
volume size in gigabytes and the EC2
KeyName. The output is the Jenkins server URL!
Loading ....