Merge lp:~javier.collado/ubuntu-test-runlists/jenkins-smoketest-setup-iso-validation-artifacts into lp:~canonical-ci-engineering/ubuntu-test-runlists/jenkins-smoketest-setup

Proposed by Javier Collado
Status: Merged
Merged at revision: 44
Proposed branch: lp:~javier.collado/ubuntu-test-runlists/jenkins-smoketest-setup-iso-validation-artifacts
Merge into: lp:~canonical-ci-engineering/ubuntu-test-runlists/jenkins-smoketest-setup
Diff against target: 180 lines (+50/-42)
4 files modified
setup-jobs.py (+20/-32)
templates/base.xml.jinja (+6/-1)
templates/iso_validation.xml.jinja (+13/-4)
templates/smoke.xml.jinja (+11/-5)
To merge this branch: bzr merge lp:~javier.collado/ubuntu-test-runlists/jenkins-smoketest-setup-iso-validation-artifacts
Reviewer Review Type Date Requested Status
Javier Collado (community) Approve
Max Brustkern Pending
Review via email: mp+139905@code.launchpad.net

Description of the change

This branch gets the YAML file from the ISO validation script so that it can be
retrieved by the QA dashboard.

At first I tried to use `utah_logs.sh` in the jenkins job, but not everything
applies to the ISO validation results, so I decided to use the parts that apply
directly in the job.

I've successfully tested locally both cases (job passes/fails), so it should
work fine the lab as well.

To post a comment you must log in.
46. By Javier Collado

Updated job relationships to what have been agreed in today's standup.

- ISO validation jobs triggers default job unconditionally.
- Default job triggers all other jobs only if it passes.

Revision history for this message
Javier Collado (javier.collado) wrote :

Since this change has been used to generate the jobs that have been in used for
a quite a long time now, I'm approving and merging this change myself.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'setup-jobs.py'
2--- setup-jobs.py 2012-12-12 15:46:05 +0000
3+++ setup-jobs.py 2012-12-14 16:16:25 +0000
4@@ -111,28 +111,6 @@
5 return instance
6
7
8-def get_downstream_projects(instance, jobname):
9- """Get downstream projects from a given job name
10-
11- :param instance: jenkins instance where job should be available
12- :type instance: jenkins.Jenkins
13- :param jobname: job name for which information should be retrieved
14- :type jobname: str
15- :returns: Downstream project names
16- :rtype: list(str)
17-
18- """
19- if not instance.job_exists(jobname):
20- return []
21-
22- job_info = instance.get_job_info(jobname)
23- projects = job_info.get('downstreamProjects', [])
24- project_names = [project['name'] for project in projects]
25- project_names = [name for name in project_names
26- if instance.job_exists(jobname)]
27- return project_names
28-
29-
30 def update_jenkins(instance, dryrun, jobname, config):
31 """Create/update a jenkins job.
32
33@@ -274,15 +252,25 @@
34 logging.info('Processing architecture ' + arch)
35 isopath = branch_isopath.format(arch=arch)
36
37+ def get_job_name(name):
38+ """Map runlist/script name to job name."""
39+ jobname = '-'.join((args.series, installtype, arch,
40+ 'smoke', name))
41+ return jobname
42+ jobnames = {get_job_name(name)
43+ for name, _command in commands.iteritems()}
44+
45 # Script/runlist job generation
46- job_names = []
47 for name, command in commands.iteritems():
48+ jobname = get_job_name(name)
49+ logging.info('Processing job ' + jobname)
50+ if name == 'default':
51+ downstream_jobs = ','.join(jobnames - set((jobname, )))
52+ else:
53+ downstream_jobs = None
54+
55 command = command.format(arch=arch)
56-
57 jobtype = 'script' if scripts_url else 'runlist'
58- jobname = '-'.join((args.series, installtype, arch,
59- 'smoke', name))
60- logging.info('Processing job ' + jobname)
61
62 template = environment.get_template('smoke.xml.jinja')
63 smokexml = template.render(name=name,
64@@ -290,23 +278,23 @@
65 installtype=installtype,
66 arch=arch,
67 isopath=isopath,
68+ downstream_jobs=downstream_jobs,
69 scripts_url=scripts_url,
70 command=command,
71 node=args.node,
72 jobtype=jobtype)
73 result, text = update_jenkins(instance, args.dryrun, jobname,
74 smokexml)
75- if result:
76- job_names.append(jobname)
77- else:
78+ if not result:
79 logging.error(jobname + ' failed to configure: ' + text)
80 failures.append(jobname)
81
82 # Static validation job generation
83+ default_jobname = get_job_name('default')
84+ assert default_jobname in jobnames
85 jobname = '-'.join((args.series, installtype, arch, 'smoke',
86 'iso-validation'))
87
88- project_names = get_downstream_projects(instance, jobname)
89 logging.info('Processing job ' + jobname)
90 template = environment.get_template('iso_validation.xml.jinja')
91 defaultxml = template.render(
92@@ -314,7 +302,7 @@
93 installtype=installtype,
94 arch=arch,
95 isopath=isopath,
96- jobs=','.join(project_names + job_names),
97+ jobs=default_jobname,
98 imageurl=args.imageurl,
99 node=args.node)
100 result, text = update_jenkins(instance, args.dryrun, jobname,
101
102=== modified file 'templates/base.xml.jinja'
103--- templates/base.xml.jinja 2012-12-04 15:52:20 +0000
104+++ templates/base.xml.jinja 2012-12-14 16:16:25 +0000
105@@ -45,7 +45,12 @@
106 <publishFailedBuilds>true</publishFailedBuilds>
107 <postActions class="vector"/>
108 </hudson.plugins.build__publisher.BuildPublisher>
109-{% block artifacts %}{% endblock %}
110+{% block artifacts %}
111+ <hudson.tasks.ArtifactArchiver>
112+ <artifacts>**/*</artifacts>
113+ <latestOnly>false</latestOnly>
114+ </hudson.tasks.ArtifactArchiver>
115+{% endblock %}
116 {% block publishers %}{% endblock %}
117 </publishers>
118 <buildWrappers>
119
120=== modified file 'templates/iso_validation.xml.jinja'
121--- templates/iso_validation.xml.jinja 2012-12-04 15:55:43 +0000
122+++ templates/iso_validation.xml.jinja 2012-12-14 16:16:25 +0000
123@@ -20,9 +20,18 @@
124 wget -q {{imageurl}}/{{series}}/{{series}}-{{installtype}}-{{arch}}.iso -O $TMPISO
125 {{ media_info_cmd('$TMPISO') }}
126 chmod 644 $TMPISO
127-sudo -u utah -i /usr/share/utah/isotest/iso_static_validation.py --name $TMPISO
128+LOG_FILE=iso_validation.log
129+set +e
130+sudo -u utah -i /usr/share/utah/isotest/iso_static_validation.py --name $TMPISO > $LOG_FILE
131+RETCODE=$?
132+set -e
133+YAML_FILE=$(grep -P "^\t/" $LOG_FILE | sed 's/^\t//')
134+if [ -n "$YAML_FILE" ]; then
135+ cp $YAML_FILE .
136+fi
137 sudo -u utah -i cp $TMPISO {{isopath}}
138 rm $TMPISO
139+exit $RETCODE
140 </command>
141 </hudson.tasks.Shell>
142 {% endblock %}
143@@ -31,9 +40,9 @@
144 <hudson.tasks.BuildTrigger>
145 <childProjects>{{jobs}}</childProjects>
146 <threshold>
147- <name>SUCCESS</name>
148- <ordinal>0</ordinal>
149- <color>BLUE</color>
150+ <name>FAILURE</name>
151+ <ordinal>2</ordinal>
152+ <color>RED</color>
153 </threshold>
154 </hudson.tasks.BuildTrigger>
155 {% endblock %}
156
157=== modified file 'templates/smoke.xml.jinja'
158--- templates/smoke.xml.jinja 2012-12-12 15:46:05 +0000
159+++ templates/smoke.xml.jinja 2012-12-14 16:16:25 +0000
160@@ -26,9 +26,15 @@
161 </hudson.tasks.Shell>
162 {% endblock %}
163
164-{% block artifacts %}
165- <hudson.tasks.ArtifactArchiver>
166- <artifacts>**/*</artifacts>
167- <latestOnly>false</latestOnly>
168- </hudson.tasks.ArtifactArchiver>
169+{% block publishers %}
170+{% if downstream_jobs %}
171+ <hudson.tasks.BuildTrigger>
172+ <childProjects>{{downstream_jobs}}</childProjects>
173+ <threshold>
174+ <name>SUCCESS</name>
175+ <ordinal>0</ordinal>
176+ <color>BLUE</color>
177+ </threshold>
178+ </hudson.tasks.BuildTrigger>
179+{% endif %}
180 {% endblock %}

Subscribers

People subscribed via source and target branches

to all changes: