Merge "Add support for 'repos' job configuration" into feature/zuulv3
This commit is contained in:
commit
2b34105092
@ -759,7 +759,7 @@ class RecordingAnsibleJob(zuul.launcher.server.AnsibleJob):
|
||||
self.launcher_server.build_history.append(
|
||||
BuildHistory(name=build.name, result=result, changes=build.changes,
|
||||
node=build.node, uuid=build.unique,
|
||||
parameters=build.parameters,
|
||||
parameters=build.parameters, jobdir=build.jobdir,
|
||||
pipeline=build.parameters['ZUUL_PIPELINE'])
|
||||
)
|
||||
self.launcher_server.running_builds.remove(build)
|
||||
|
2
tests/fixtures/config/openstack/git/project-config/playbooks/dsvm.yaml
vendored
Normal file
2
tests/fixtures/config/openstack/git/project-config/playbooks/dsvm.yaml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
- hosts: all
|
||||
tasks: []
|
@ -71,12 +71,22 @@
|
||||
- python27
|
||||
- python35
|
||||
|
||||
- job:
|
||||
name: dsvm
|
||||
parent: base
|
||||
repos:
|
||||
- openstack/keystone
|
||||
- openstack/nova
|
||||
|
||||
# Project definitions
|
||||
|
||||
- project:
|
||||
name: openstack/nova
|
||||
templates:
|
||||
- python-jobs
|
||||
check:
|
||||
jobs:
|
||||
- dsvm
|
||||
gate:
|
||||
queue: integrated
|
||||
|
||||
@ -84,5 +94,8 @@
|
||||
name: openstack/keystone
|
||||
templates:
|
||||
- python-jobs
|
||||
check:
|
||||
jobs:
|
||||
- dsvm
|
||||
gate:
|
||||
queue: integrated
|
||||
|
@ -14,6 +14,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
|
||||
from tests.base import AnsibleZuulTestCase
|
||||
|
||||
|
||||
@ -54,3 +56,45 @@ class TestOpenStack(AnsibleZuulTestCase):
|
||||
"A should report start and success")
|
||||
self.assertEqual(self.getJobFromHistory('python27').node,
|
||||
'ubuntu-trusty')
|
||||
|
||||
def test_dsvm_keystone_repo(self):
|
||||
self.launch_server.keep_jobdir = True
|
||||
A = self.fake_gerrit.addFakeChange('openstack/nova', 'master', 'A')
|
||||
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertHistory([
|
||||
dict(name='dsvm', result='SUCCESS', changes='1,1')])
|
||||
build = self.getJobFromHistory('dsvm')
|
||||
|
||||
# Check that a change to nova triggered a keystone clone
|
||||
launcher_git_dir = os.path.join(self.launcher_src_root,
|
||||
'openstack', 'keystone', '.git')
|
||||
self.assertTrue(os.path.exists(launcher_git_dir),
|
||||
msg='openstack/keystone should be cloned.')
|
||||
|
||||
jobdir_git_dir = os.path.join(build.jobdir.src_root,
|
||||
'openstack', 'keystone', '.git')
|
||||
self.assertTrue(os.path.exists(jobdir_git_dir),
|
||||
msg='openstack/keystone should be cloned.')
|
||||
|
||||
def test_dsvm_nova_repo(self):
|
||||
self.launch_server.keep_jobdir = True
|
||||
A = self.fake_gerrit.addFakeChange('openstack/keystone', 'master', 'A')
|
||||
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertHistory([
|
||||
dict(name='dsvm', result='SUCCESS', changes='1,1')])
|
||||
build = self.getJobFromHistory('dsvm')
|
||||
|
||||
# Check that a change to keystone triggered a nova clone
|
||||
launcher_git_dir = os.path.join(self.launcher_src_root,
|
||||
'openstack', 'nova', '.git')
|
||||
self.assertTrue(os.path.exists(launcher_git_dir),
|
||||
msg='openstack/nova should be cloned.')
|
||||
|
||||
jobdir_git_dir = os.path.join(build.jobdir.src_root,
|
||||
'openstack', 'nova', '.git')
|
||||
self.assertTrue(os.path.exists(jobdir_git_dir),
|
||||
msg='openstack/nova should be cloned.')
|
||||
|
@ -115,6 +115,7 @@ class JobParser(object):
|
||||
'run': str,
|
||||
'_source_context': model.SourceContext,
|
||||
'roles': to_list(role),
|
||||
'repos': to_list(str),
|
||||
}
|
||||
|
||||
return vs.Schema(job)
|
||||
@ -185,6 +186,11 @@ class JobParser(object):
|
||||
ns.addNode(node)
|
||||
job.nodeset = ns
|
||||
|
||||
if 'repos' in conf:
|
||||
# Accumulate repos in a set so that job inheritance
|
||||
# is additive.
|
||||
job.repos = job.repos.union(set(conf.get('repos', [])))
|
||||
|
||||
tags = conf.get('tags')
|
||||
if tags:
|
||||
# Tags are merged via a union rather than a
|
||||
|
@ -348,6 +348,13 @@ class LaunchClient(object):
|
||||
params['nodes'] = nodes
|
||||
params['zuul'] = zuul_params
|
||||
projects = set()
|
||||
if job.repos:
|
||||
for repo in job.repos:
|
||||
project = item.pipeline.source.getProject(repo)
|
||||
params['projects'].append(
|
||||
dict(name=repo,
|
||||
url=item.pipeline.source.getGitUrl(project)))
|
||||
projects.add(project)
|
||||
for item in all_items:
|
||||
if item.change.project not in projects:
|
||||
params['projects'].append(
|
||||
|
@ -87,7 +87,7 @@ class JobDir(object):
|
||||
# trusted.cfg
|
||||
# untrusted.cfg
|
||||
# work
|
||||
# git
|
||||
# src
|
||||
# logs
|
||||
self.keep = keep
|
||||
self.root = tempfile.mkdtemp(dir=root)
|
||||
|
@ -699,6 +699,7 @@ class Job(object):
|
||||
attempts=3,
|
||||
final=False,
|
||||
roles=frozenset(),
|
||||
repos=frozenset(),
|
||||
)
|
||||
|
||||
# These are generally internal attributes which are not
|
||||
|
Loading…
Reference in New Issue
Block a user