summaryrefslogtreecommitdiff
path: root/jenkinstool
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2012-08-19 14:57:09 +0100
committerLars Wirzenius <liw@liw.fi>2012-08-19 14:57:09 +0100
commitaf9d083d3c0be2088595b866ac08ecbbe2c9b935 (patch)
tree2d1b9b0f8a8c559a8b7578cbbd3a1d8e78c95a44 /jenkinstool
parentea52801b59b6b4cd15ad7750b3fac6f0044fb42d (diff)
downloadjenkinstool-af9d083d3c0be2088595b866ac08ecbbe2c9b935.tar.gz
Put sources into one place only
This avoids having the version control repository duplicated for each job.
Diffstat (limited to 'jenkinstool')
-rwxr-xr-xjenkinstool90
1 files changed, 54 insertions, 36 deletions
diff --git a/jenkinstool b/jenkinstool
index cd41bda..09ec3ce 100755
--- a/jenkinstool
+++ b/jenkinstool
@@ -61,6 +61,12 @@ commit_date()
}
project="%(project.name)s"
+workspace="/var/lib/jenkins/workspace/${project}_localhost_vcs-update"
+workdir="$(pwd)"
+if [ -e "$workspace" ]
+then
+ cd "$workspace"
+fi
version="$(upstream_version).vcs$(commit_date)"
artifacts="%(global.artifacts)s/${project}"
project_artifacts="$artifacts/$project"
@@ -87,6 +93,8 @@ then
archall_changes="${sourcepkg}_${version}-1_all.changes"
fi
+cd "$workdir"
+
'''
@@ -136,12 +144,6 @@ class JobGenerator(object):
jc.set_description('A1 Job Trigger')
return jc
- host = config['hosts'][0]
- project = {'name': 'a1trigger'}
- jc = self.create_job_config(host, project, 'trigger')
- jc.set_description('A1 Job Trigger')
- return jc
-
def reprepro_setup_job(self, config):
'''Create job that sets up reprepro.'''
@@ -212,7 +214,7 @@ reprepro -b "$base" export
jc.set_description(
'Create or update pbuilder base.tgz on %(host.ssh-target)s')
- jc.add_ssh_command(prelude + '''
+ jc.add_ssh_command('''
basetgz=/var/cache/pbuilder/base.tgz
if [ -e "$basetgz" ]
then
@@ -235,7 +237,8 @@ else
sudo pbuilder $opts \
--distribution "%(host.debian-dist)s" \
--mirror "%(global.debian-mirror)s" \
- --othermirror "deb $debianurl %(host.debian-dist)s main"
+ --othermirror \
+ "deb %(global.artifacts-url)s/debian %(host.debian-dist)s main"
fi
''')
@@ -243,20 +246,27 @@ fi
def generate_project(self, config, project):
'''Generate all the jobs for a given project.'''
+
+ localhost = {
+ 'name': 'localhost',
+ 'arch': 'irrelevant',
+ }
main_host = config['hosts'][0]
jobs = []
+ jobs.append(self.vcs_watch_job(localhost, project))
+
for host in config['hosts']:
jobs.append(self.build_job(host, project))
- jobs.append(self.tarball_job(main_host, project))
+ jobs.append(self.tarball_job(localhost, project))
done = set()
for host in config['hosts']:
if host['debian-dist'] not in done:
jobs.append(self.dsc_job(host, project))
jobs.append(self.process_incoming_job(
- config, project, 'dsc_%s' % host['name']))
+ config, localhost, project, 'dsc_%s' % host['name']))
done.add(host['debian-dist'])
build_all_dists = set()
@@ -266,10 +276,19 @@ fi
jobs.append(self.apt_upgrade_job(host, project))
jobs.append(self.deb_job(host, project, build_all))
jobs.append(self.process_incoming_job(
- config, project, 'deb_%s' % host['name']))
+ config, localhost, project, 'deb_%s' % host['name']))
return jobs
+ def vcs_watch_job(self, host, project):
+ '''Generate a job watch a VCS repository.'''
+
+ jc = self.create_job_config(host, project, 'vcs-update')
+ jc.set_description(
+ 'Watch a version control repository: %(project.bzr)s')
+ jc.set_bzr(project['bzr'])
+ return jc
+
def apt_upgrade_job(self, host, project):
'''Create job to upgrade the build environment with apt.'''
@@ -277,7 +296,7 @@ fi
jc.set_description('Upgrade build environment on %(host.ssh-target)s '
'for %(project.name)s from %(project.bzr)s')
- jc.add_ssh_command(prelude + '''
+ jc.add_ssh_command('''
sudo apt-get update
sudo apt-get --no-remove --allow-unauthenticated -y upgrade
''')
@@ -291,6 +310,10 @@ sudo apt-get --no-remove --allow-unauthenticated -y upgrade
jc.set_description('Build %(project.name)s from %(project.bzr)s '
'on %(host.ssh-target)s')
+ jc.add_shell_command(prelude + '''
+find . -delete
+cp -a "$workspace/." .
+''')
self.add_rsync_workspace_to_target(jc)
if not self.pretend:
jc.add_ssh_command('\n'.join(project['build-commands']))
@@ -303,28 +326,21 @@ sudo apt-get --no-remove --allow-unauthenticated -y upgrade
jc = self.create_job_config(host, project, 'tarball')
jc.set_description('Create release tarball for %(project.name)s '
- 'from %(project.bzr)s on %(host.ssh-target)s')
- self.add_rsync_workspace_to_target(jc)
- jc.add_ssh_command(prelude + '''\
-temp="$(mktemp -d)"
-mkdir "$temp/${project}-${version}"
-bzr export --per-file-timestamps "$temp/${project}-${version}"
-tar -caf "$tarball" -C "$temp" --anchored \
- --exclude "${project}-${version}/debian" \
- "${project}-${version}"
-rm -rf "$temp"
-''')
- self.add_rsync_workspace_from_target(jc)
-
- # Publish the tarball in the artifact location.
+ 'from %(project.bzr)s')
jc.add_shell_command(prelude + '''\
+find . -delete
if [ ! -e "$artifacts/$tarball" ]
then
mkdir -p "$artifacts"
+ mkdir "${project}-${version}"
+ (cd "$workspace" &&
+ bzr export "$workdir/${project}-${version}")
+ tar -caf "$tarball" --anchored \
+ --exclude "${project}-${version}/debian" \
+ "${project}-${version}"
mv "$tarball" "$artifacts/."
else
echo "$artifacts/$tarball already exists, ignoring rebuilt version"
- rm "$tarball"
fi
''')
@@ -355,13 +371,12 @@ fi
return jc
- def process_incoming_job(self, config, project, suffix):
+ def process_incoming_job(self, config, localhost, project, suffix):
'''Create job that processing reprepro's incoming queue.'''
- host = { 'name': 'localhost', 'arch': 'unimportant' }
- jc = self.create_job_config(host, project, 'incoming_' + suffix)
+ jc = self.create_job_config(localhost, project, 'incoming_' + suffix)
jc.set_description('Process reprepro incoming queue')
- jc.add_shell_command(prelude +
+ jc.add_shell_command(
'reprepro -b "%(global.repreprobase)s" processincoming default')
return jc
@@ -372,6 +387,11 @@ fi
jc.set_description('Build Debian binary package for %(project.name)s '
'from %(project.bzr)s on %(host.ssh-target)s')
+ jc.add_shell_command(prelude + '''
+find . -delete
+cp -a "$workspace/." .
+''')
+
self.add_rsync_workspace_to_target(jc)
script = prelude
@@ -430,18 +450,16 @@ rm -rf "$temp"
'pretend': 'true' if self.pretend else 'false',
'pbuilder-max-age': str(self.pbuilder_max_age),
})
- if 'bzr' in project:
- jc.set_bzr(project['bzr'])
return jc
def add_rsync_workspace_to_target(self, jc):
- jc.add_ssh_command(prelude + 'mkdir -p "%(host.directory)s"')
- jc.add_shell_command(prelude +
+ jc.add_ssh_command('mkdir -p "%(host.directory)s"')
+ jc.add_shell_command(
'rsync -aHS --delete-before . '
'"%(host.ssh-target)s:%(host.directory)s/."')
def add_rsync_workspace_from_target(self, jc):
- jc.add_shell_command(prelude +
+ jc.add_shell_command(
'rsync -aHS --delete-before '
'"%(host.ssh-target)s:%(host.directory)s/." .')