#!/bin/bash # Echo commands, exit on error set -o xtrace set -o errexit # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi # This directory CUR_DIR=$(cd $(dirname "$0") && pwd) # Configure trunk jenkins! echo "deb http://pkg.jenkins-ci.org/debian binary/" > /etc/apt/sources.list.d/jenkins.list wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - apt-get update # Clean out old jenkins - useful if you are having issues upgrading CLEAN_JENKINS=${CLEAN_JENKINS:-no} if [ "$CLEAN_JENKINS" = "yes" ]; then apt-get remove jenkins jenkins-common fi # Install software DEPS="jenkins cloud-utils" apt-get install -y --force-yes $DEPS # Install jenkins if [ ! -e /var/lib/jenkins ]; then echo "Jenkins installation failed" exit 1 fi # Make sure user has configured a jenkins ssh pubkey if [ ! -e /var/lib/jenkins/.ssh/id_rsa.pub ]; then echo "Public key for jenkins is missing. This is used to ssh into your instances." echo "Please run "su -c ssh-keygen jenkins" before proceeding" exit 1 fi # Setup sudo JENKINS_SUDO=/etc/sudoers.d/jenkins cat > $JENKINS_SUDO < $JENKINS_GITCONF < 4 Jenkins jenkins@rcb.me EOF # Add build numbers JOBS=`ls jobs` for job in ${JOBS// / }; do if [ ! -e jobs/$job/nextBuildNumber ]; then echo 1 > jobs/$job/nextBuildNumber fi done # Set ownership to jenkins chown -R jenkins $CUR_DIR # Make sure this directory is accessible to jenkins if ! su -c "ls $CUR_DIR" jenkins; then echo "Your devstack directory is not accessible by jenkins." echo "There is a decent chance you are trying to run this from a directory in /root." echo "If so, try moving devstack elsewhere (eg. /opt/devstack)." exit 1 fi # Move aside old jobs, if present if [ ! -h /var/lib/jenkins/jobs ]; then echo "Installing jobs symlink" if [ -d /var/lib/jenkins/jobs ]; then mv /var/lib/jenkins/jobs /var/lib/jenkins/jobs.old fi fi # Set up jobs symlink rm -f /var/lib/jenkins/jobs ln -s $CUR_DIR/jobs /var/lib/jenkins/jobs # List of plugins PLUGINS=http://hudson-ci.org/downloads/plugins/build-timeout/1.6/build-timeout.hpi,http://mirrors.jenkins-ci.org/plugins/git/1.1.12/git.hpi,http://hudson-ci.org/downloads/plugins/global-build-stats/1.2/global-build-stats.hpi,http://hudson-ci.org/downloads/plugins/greenballs/1.10/greenballs.hpi,http://download.hudson-labs.org/plugins/console-column-plugin/1.0/console-column-plugin.hpi # Configure plugins for plugin in ${PLUGINS//,/ }; do name=`basename $plugin` dest=/var/lib/jenkins/plugins/$name if [ ! -e $dest ]; then curl -L $plugin -o $dest fi done # Restart jenkins /etc/init.d/jenkins stop || true /etc/init.d/jenkins start