diff options
author | Lars Wirzenius <liw@liw.fi> | 2012-08-19 14:57:09 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2012-08-19 14:57:09 +0100 |
commit | af9d083d3c0be2088595b866ac08ecbbe2c9b935 (patch) | |
tree | 2d1b9b0f8a8c559a8b7578cbbd3a1d8e78c95a44 /jenkinstool | |
parent | ea52801b59b6b4cd15ad7750b3fac6f0044fb42d (diff) | |
download | jenkinstool-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-x | jenkinstool | 90 |
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/." .') |