Skip to content

Commit 28c6779

Browse files
committed
Merge pull request #192 from cloudbuilders/jenkins
Jenkins
2 parents a0dfb9d + fd5cf0b commit 28c6779

File tree

18 files changed

+619
-9
lines changed

18 files changed

+619
-9
lines changed

tools/build_uec.sh

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ GUEST_CORES=${GUEST_CORES:-1}
9090

9191
# libvirt.xml configuration
9292
NET_XML=$vm_dir/net.xml
93+
NET_NAME=${NET_NAME:-devstack-$GUEST_NETWORK}
9394
cat > $NET_XML <<EOF
9495
<network>
95-
<name>devstack-$GUEST_NETWORK</name>
96+
<name>$NET_NAME</name>
9697
<bridge name="stackbr%d" />
9798
<forward/>
9899
<ip address="$GUEST_GATEWAY" netmask="$GUEST_NETMASK">
@@ -104,9 +105,9 @@ cat > $NET_XML <<EOF
104105
EOF
105106

106107
if [[ "$GUEST_RECREATE_NET" == "yes" ]]; then
107-
virsh net-destroy devstack-$GUEST_NETWORK || true
108+
virsh net-destroy $NET_NAME || true
108109
# destroying the network isn't enough to delete the leases
109-
rm -f /var/lib/libvirt/dnsmasq/devstack-$GUEST_NETWORK.leases
110+
rm -f /var/lib/libvirt/dnsmasq/$NET_NAME.leases
110111
virsh net-create $vm_dir/net.xml
111112
fi
112113

@@ -134,7 +135,7 @@ cat > $LIBVIRT_XML <<EOF
134135
</disk>
135136
136137
<interface type='network'>
137-
<source network='devstack-$GUEST_NETWORK'/>
138+
<source network='$NET_NAME'/>
138139
</interface>
139140
140141
<!-- The order is significant here. File must be defined first -->
@@ -170,7 +171,7 @@ instance-type: m1.ignore
170171
local-hostname: $GUEST_NAME.local
171172
EOF
172173

173-
# set metadata
174+
# set user-data
174175
cat > $vm_dir/uec/user-data<<EOF
175176
#!/bin/bash
176177
# hostname needs to resolve for rabbit
@@ -186,6 +187,33 @@ cat > localrc <<LOCAL_EOF
186187
ROOTSLEEP=0
187188
`cat $TOP_DIR/localrc`
188189
LOCAL_EOF
190+
# Disable byobu
191+
/usr/bin/byobu-disable
192+
EOF
193+
194+
# Setup stack user with our key
195+
CONFIGURE_STACK_USER=${CONFIGURE_STACK_USER:-yes}
196+
if [[ -e ~/.ssh/id_rsa.pub && "$CONFIGURE_STACK_USER" = "yes" ]]; then
197+
PUB_KEY=`cat ~/.ssh/id_rsa.pub`
198+
cat >> $vm_dir/uec/user-data<<EOF
199+
mkdir -p /opt/stack
200+
useradd -U -G sudo -s /bin/bash -d /opt/stack -m stack
201+
echo stack:pass | chpasswd
202+
mkdir -p /opt/stack/.ssh
203+
echo "$PUB_KEY" > /opt/stack/.ssh/authorized_keys
204+
chown -R stack /opt/stack
205+
chmod 700 /opt/stack/.ssh
206+
chmod 600 /opt/stack/.ssh/authorized_keys
207+
208+
grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers ||
209+
echo "#includedir /etc/sudoers.d" >> /etc/sudoers
210+
( umask 226 && echo "stack ALL=(ALL) NOPASSWD:ALL" \
211+
> /etc/sudoers.d/50_stack_sh )
212+
EOF
213+
fi
214+
215+
# Run stack.sh
216+
cat >> $vm_dir/uec/user-data<<EOF
189217
./stack.sh
190218
EOF
191219

tools/jenkins/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
Getting Started With Jenkins and Devstack
2+
=========================================
3+
This little corner of devstack is to show how to get an Openstack jenkins
4+
environment up and running quickly, using the rcb configuration methodology.
5+
6+
7+
To create a jenkins server
8+
--------------------------
9+
10+
cd tools/jenkins/jenkins_home
11+
./build_jenkins.sh
12+
13+
This will create a jenkins environment configured with sample test scripts that run against xen and kvm.
14+
15+
Configuring XS
16+
--------------
17+
In order to make the tests for XS work, you must install xs 5.6 on a separate machine,
18+
and install the the jenkins public key on that server. You then need to create the
19+
/var/lib/jenkins/xenrc on your jenkins server like so:
20+
21+
MYSQL_PASSWORD=secrete
22+
SERVICE_TOKEN=secrete
23+
ADMIN_PASSWORD=secrete
24+
RABBIT_PASSWORD=secrete
25+
# This is the password for your guest (for both stack and root users)
26+
GUEST_PASSWORD=secrete
27+
# Do not download the usual images yet!
28+
IMAGE_URLS=""
29+
FLOATING_RANGE=192.168.1.224/28
30+
VIRT_DRIVER=xenserver
31+
# Explicitly set multi-host
32+
MULTI_HOST=1
33+
# Give extra time for boot
34+
ACTIVE_TIMEOUT=45
35+
# IMPORTANT: This is the ip of your xenserver
36+
XEN_IP=10.5.5.1
37+
# IMPORTANT: The following must be set to your dom0 root password!
38+
XENAPI_PASSWORD='MY_XEN_ROOT_PW'

tools/jenkins/adapters/euca.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
# Echo commands, exit on error
3+
set -o xtrace
4+
set -o errexit
5+
6+
TOP_DIR=$(cd ../../.. && pwd)
7+
HEAD_IP=`cat $TOP_DIR/addresses | grep HEAD | cut -d "=" -f2`
8+
ssh stack@$HEAD_IP 'cd devstack && source openrc && cd exercises && ./euca.sh'
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
# Echo commands, exit on error
3+
set -o xtrace
4+
set -o errexit
5+
6+
TOP_DIR=$(cd ../../.. && pwd)
7+
HEAD_IP=`cat $TOP_DIR/addresses | grep HEAD | cut -d "=" -f2`
8+
ssh stack@$HEAD_IP 'cd devstack && source openrc && cd exercises && ./floating_ips.sh'
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
EXECUTOR_NUMBER=$1
4+
CONFIGURATION=$2
5+
ADAPTER=$3
6+
RC=$4
7+
8+
function usage() {
9+
echo "Usage: $0 - Build a configuration"
10+
echo ""
11+
echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
12+
exit 1
13+
}
14+
15+
# Validate inputs
16+
if [[ "$EXECUTOR_NUMBER" = "" || "$CONFIGURATION" = "" || "$ADAPTER" = "" ]]; then
17+
usage
18+
fi
19+
20+
# Execute configuration script
21+
cd configurations && ./$CONFIGURATION.sh $EXECUTOR_NUMBER $CONFIGURATION $ADAPTER "$RC"
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/bash
2+
3+
EXECUTOR_NUMBER=$1
4+
CONFIGURATION=$2
5+
ADAPTER=$3
6+
RC=$4
7+
8+
function usage() {
9+
echo "Usage: $0 - Build a test configuration"
10+
echo ""
11+
echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
12+
exit 1
13+
}
14+
15+
# Validate inputs
16+
if [[ "$EXECUTOR_NUMBER" = "" || "$CONFIGURATION" = "" || "$ADAPTER" = "" ]]; then
17+
usage
18+
fi
19+
20+
# This directory
21+
CUR_DIR=$(cd $(dirname "$0") && pwd)
22+
23+
# devstack directory
24+
cd ../../..
25+
TOP_DIR=$(pwd)
26+
27+
# Name test instance based on executor
28+
BASE_NAME=executor-`printf "%02d" $EXECUTOR_NUMBER`
29+
GUEST_NAME=$BASE_NAME.$ADAPTER
30+
virsh list | grep $BASE_NAME | cut -d " " -f1 | xargs -n 1 virsh destroy || true
31+
virsh net-list | grep $BASE_NAME | cut -d " " -f1 | xargs -n 1 virsh net-destroy || true
32+
33+
# Configure localrc
34+
cat <<EOF >localrc
35+
RECLONE=yes
36+
GUEST_NETWORK=$EXECUTOR_NUMBER
37+
GUEST_NAME=$GUEST_NAME
38+
FLOATING_RANGE=192.168.$EXECUTOR_NUMBER.128/27
39+
GUEST_CORES=1
40+
GUEST_RAM=12574720
41+
MYSQL_PASSWORD=chicken
42+
RABBIT_PASSWORD=chicken
43+
SERVICE_TOKEN=chicken
44+
ADMIN_PASSWORD=chicken
45+
USERNAME=admin
46+
TENANT=admin
47+
NET_NAME=$BASE_NAME
48+
ACTIVE_TIMEOUT=45
49+
BOOT_TIMEOUT=45
50+
$RC
51+
EOF
52+
cd tools
53+
sudo ./build_uec.sh
54+
55+
# Make the address of the instances available to test runners
56+
echo HEAD=`cat /var/lib/libvirt/dnsmasq/$BASE_NAME.leases | cut -d " " -f3` > $TOP_DIR/addresses

tools/jenkins/configurations/xs.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/bash
2+
set -o errexit
3+
set -o xtrace
4+
5+
6+
EXECUTOR_NUMBER=$1
7+
CONFIGURATION=$2
8+
ADAPTER=$3
9+
RC=$4
10+
11+
function usage() {
12+
echo "Usage: $0 - Build a test configuration"
13+
echo ""
14+
echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
15+
exit 1
16+
}
17+
18+
# Validate inputs
19+
if [[ "$EXECUTOR_NUMBER" = "" || "$CONFIGURATION" = "" || "$ADAPTER" = "" ]]; then
20+
usage
21+
fi
22+
23+
# Configuration of xenrc
24+
XENRC=/var/lib/jenkins/xenrc
25+
if [ ! -e $XENRC ]; then
26+
echo "/var/lib/jenkins/xenrc is not present! See README.md"
27+
exit 1
28+
fi
29+
30+
# Move to top of devstack
31+
cd ../../..
32+
33+
# Use xenrc as the start of our localrc
34+
cp $XENRC localrc
35+
36+
# Set the PUB_IP
37+
PUB_IP=192.168.1.1$EXECUTOR_NUMBER
38+
echo "PUB_IP=$PUB_IP" >> localrc
39+
40+
# Overrides
41+
echo "$RC" >> localrc
42+
43+
# Source localrc
44+
. localrc
45+
46+
# Make host ip available to tester
47+
echo "HEAD=$PUB_IP" > addresses
48+
49+
# Build configuration
50+
REMOTE_DEVSTACK=/root/devstack
51+
ssh root@$XEN_IP "rm -rf $REMOTE_DEVSTACK"
52+
scp -pr . root@$XEN_IP:$REMOTE_DEVSTACK
53+
ssh root@$XEN_IP "cd $REMOTE_DEVSTACK/tools/xen && ./build_domU.sh"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
builds
2+
workspace
3+
*.sw*
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/bin/bash
2+
3+
# Echo commands, exit on error
4+
set -o xtrace
5+
set -o errexit
6+
7+
# Make sure only root can run our script
8+
if [[ $EUID -ne 0 ]]; then
9+
echo "This script must be run as root"
10+
exit 1
11+
fi
12+
13+
# Make sure user has configured an ssh pubkey
14+
if [ ! -e /root/.ssh/id_rsa.pub ]; then
15+
echo "Public key is missing. This is used to ssh into your instances."
16+
echo "Please run ssh-keygen before proceeding"
17+
exit 1
18+
fi
19+
20+
# This directory
21+
CUR_DIR=$(cd $(dirname "$0") && pwd)
22+
23+
# Configure trunk jenkins!
24+
echo "deb http://pkg.jenkins-ci.org/debian binary/" > /etc/apt/sources.list.d/jenkins.list
25+
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
26+
apt-get update
27+
28+
29+
# Clean out old jenkins - useful if you are having issues upgrading
30+
CLEAN_JENKINS=${CLEAN_JENKINS:-no}
31+
if [ "$CLEAN_JENKINS" = "yes" ] then;
32+
apt-get remove jenkins jenkins-common
33+
fi
34+
35+
# Install software
36+
DEPS="jenkins cloud-utils"
37+
apt-get install -y --force-yes $DEPS
38+
39+
# Install jenkins
40+
if [ ! -e /var/lib/jenkins ]; then
41+
echo "Jenkins installation failed"
42+
exit 1
43+
fi
44+
45+
# Setup sudo
46+
JENKINS_SUDO=/etc/sudoers.d/jenkins
47+
cat > $JENKINS_SUDO <<EOF
48+
jenkins ALL = NOPASSWD: ALL
49+
EOF
50+
chmod 440 $JENKINS_SUDO
51+
52+
# Setup .gitconfig
53+
JENKINS_GITCONF=/var/lib/jenkins/hudson.plugins.git.GitSCM.xml
54+
cat > $JENKINS_GITCONF <<EOF
55+
<?xml version='1.0' encoding='UTF-8'?>
56+
<hudson.plugins.git.GitSCM_-DescriptorImpl>
57+
<generation>4</generation>
58+
<globalConfigName>Jenkins</globalConfigName>
59+
<globalConfigEmail>jenkins@rcb.me</globalConfigEmail>
60+
</hudson.plugins.git.GitSCM_-DescriptorImpl>
61+
EOF
62+
63+
# Add build numbers
64+
JOBS=`ls jobs`
65+
for job in ${JOBS// / }; do
66+
if [ ! -e jobs/$job/nextBuildNumber ]; then
67+
echo 1 > jobs/$job/nextBuildNumber
68+
fi
69+
done
70+
71+
# Set ownership to jenkins
72+
chown -R jenkins $CUR_DIR
73+
74+
# Make sure this directory is accessible to jenkins
75+
if ! su -c "ls $CUR_DIR" jenkins; then
76+
echo "Your devstack directory is not accessible by jenkins."
77+
echo "There is a decent chance you are trying to run this from a directory in /root."
78+
echo "If so, try moving devstack elsewhere (eg. /opt/devstack)."
79+
exit 1
80+
fi
81+
82+
# Move aside old jobs, if present
83+
if [ ! -h /var/lib/jenkins/jobs ]; then
84+
echo "Installing jobs symlink"
85+
if [ -d /var/lib/jenkins/jobs ]; then
86+
mv /var/lib/jenkins/jobs /var/lib/jenkins/jobs.old
87+
fi
88+
fi
89+
90+
# Set up jobs symlink
91+
rm -f /var/lib/jenkins/jobs
92+
ln -s $CUR_DIR/jobs /var/lib/jenkins/jobs
93+
94+
# List of plugins
95+
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
96+
97+
# Configure plugins
98+
for plugin in ${PLUGINS//,/ }; do
99+
name=`basename $plugin`
100+
dest=/var/lib/jenkins/plugins/$name
101+
if [ ! -e $dest ]; then
102+
curl -L $plugin -o $dest
103+
fi
104+
done
105+
106+
# Restart jenkins
107+
/etc/init.d/jenkins stop || true
108+
/etc/init.d/jenkins start

0 commit comments

Comments
 (0)