109 lines
3.1 KiB
Bash
Executable File
109 lines
3.1 KiB
Bash
Executable File
#!/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 <<EOF
|
|
jenkins ALL = NOPASSWD: ALL
|
|
EOF
|
|
chmod 440 $JENKINS_SUDO
|
|
|
|
# Setup .gitconfig
|
|
JENKINS_GITCONF=/var/lib/jenkins/hudson.plugins.git.GitSCM.xml
|
|
cat > $JENKINS_GITCONF <<EOF
|
|
<?xml version='1.0' encoding='UTF-8'?>
|
|
<hudson.plugins.git.GitSCM_-DescriptorImpl>
|
|
<generation>4</generation>
|
|
<globalConfigName>Jenkins</globalConfigName>
|
|
<globalConfigEmail>jenkins@rcb.me</globalConfigEmail>
|
|
</hudson.plugins.git.GitSCM_-DescriptorImpl>
|
|
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
|