From 19b05f689c056e1a3fc433526085f3bb91917c8d Mon Sep 17 00:00:00 2001 From: Jakob Meng Date: Fri, 25 Mar 2022 09:27:00 +0100 Subject: [PATCH] Fixed job hierarchy for Zuul CI Added a parent job *-functional-devstack-base which defines basic job attributes such as job.required-projects. It does not restrict branches because else Zuul would not find a matching parent job variant during job freeze when child jobs are on other branches. It does not define attributes job.override-checkout and job.required-projects.override-\ checkout because else Zuul would use this branch when matching variants for parent jobs during job freeze. Jobs *-devstack-{xena,wallaby,train}-ansible-2.{11,12} have been changed to inherit from *-devstack-base instead of *-devstack-ansible-\ 2.{11,12}. The latter do not run for branch stable/1.0.0 which caused Zuul to dismiss the *-devstack-{xena,wallaby,train}-ansible-2.{11,12} when collecting parent job variants during job freeze: The previous parent jobs *-devstack-ansible-2.{11,12} set job.branches to master so Zuul cannot match that job when it collects job variants and thus would ignore the child jobs. Likewise, jobs *-devstack-{xena,wallaby,train}-ansible-2.{11,12} cannot inherit from any parent job which sets job.required-projects.override-\ checkout on openstack/devstack because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack jobs when collecting variants for parent jobs. Added a warning to the beginning of .zuul.yaml to keep this file in sync between branches to avoid issues e.g. with job scheduling. Zuul CI will search in master branch first when collecting job variants during job freeze which can have unwanted side effects. For example, when parent job *-base has been changed in stable/1.0.0 branch, Zuul could still use *-base variants from master branch during job freeze on child jobs such as *-ussuri-ansible-2.11 etc. Change-Id: I3ca4ed5795c45a5565a374f04a1ddb29816bf114 --- .zuul.yaml | 158 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 129 insertions(+), 29 deletions(-) diff --git a/.zuul.yaml b/.zuul.yaml index 5c9254fb..cc1688d3 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -1,23 +1,25 @@ # yamllint disable --- +# Keep this file in sync between branches to avoid issues e.g. with job scheduling. Zuul CI will search in master branch +# first when collecting job variants during job freeze which can have unwanted side effects. For example, when parent +# job *-base has been changed in stable/1.0.0 branch, Zuul could still use *-base variants from master branch during job +# freeze on child jobs such as *-ussuri-ansible-2.11 etc. - job: - name: ansible-collections-openstack-functional-devstack + name: ansible-collections-openstack-functional-devstack-base parent: openstacksdk-functional-devstack - branches: master + # Do not restrict branches in base jobs because else Zuul would not find a matching + # parent job variant during job freeze when child jobs are on other branches. post-run: ci/playbooks/postlog.yaml description: | - Run openstack collections functional tests against a master devstack - using master of openstacksdk with latest ansible release + Run openstack collections functional tests against a devstack + # Do not set job.override-checkout or job.required-projects.override-checkout in base job because + # else Zuul will use this branch when matching variants for parent jobs during job freeze required-projects: - openstack/ansible-collections-openstack - openstack/designate - # openstack/os-client-config is required through job openstacksdk-functional-devstack - - # always use master branch when collecting parent job variants, refer to git blame for rationale. - name: openstack/devstack - override-checkout: master - - # always use master branch when collecting parent job variants, refer to git blame for rationale. - name: openstack/openstacksdk - override-checkout: master + # openstack/devstack is required through parent job openstacksdk-functional-devstack + # openstack/os-client-config is required through parent job openstacksdk-functional-devstack + # openstack/openstacksdk is required through parent job openstacksdk-functional-devstack irrelevant-files: &ignore_files - changelogs/.* - galaxy.* @@ -44,9 +46,17 @@ extensions_to_txt: log: true +- job: + name: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base + branches: master + description: | + Run openstack collections functional tests against a master devstack + using master of openstacksdk with latest ansible release + - job: name: ansible-collections-openstack-functional-devstack-octavia - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -83,7 +93,7 @@ - job: name: ansible-collections-openstack-functional-devstack-releases - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -94,7 +104,7 @@ # Job with Ansible 2.9 for checking backward compatibility - job: name: ansible-collections-openstack-functional-devstack-ansible-2.9 - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -107,7 +117,7 @@ - job: name: ansible-collections-openstack-functional-devstack-ansible-2.11 - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -120,7 +130,7 @@ - job: name: ansible-collections-openstack-functional-devstack-ansible-2.12 - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -133,7 +143,7 @@ - job: name: ansible-collections-openstack-functional-devstack-ansible-devel - parent: ansible-collections-openstack-functional-devstack + parent: ansible-collections-openstack-functional-devstack-base branches: master description: | Run openstack collections functional tests against a master devstack @@ -147,7 +157,14 @@ - job: name: ansible-collections-openstack-functional-devstack-xena-ansible-2.12 - parent: ansible-collections-openstack-functional-devstack-ansible-2.12 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a xena devstack using xena branch of openstacksdk and stable 2.12 branch of ansible @@ -155,14 +172,29 @@ override-checkout: stable/xena # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.12 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/xena branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/xena branch + name: openstack/devstack override-checkout: stable/xena - name: openstack/openstacksdk override-checkout: stable/xena + vars: + tox_envlist: ansible-2.12 - job: name: ansible-collections-openstack-functional-devstack-wallaby-ansible-2.12 - parent: ansible-collections-openstack-functional-devstack-ansible-2.12 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a wallaby devstack using wallaby branch of openstacksdk and stable 2.12 branch of ansible @@ -170,14 +202,29 @@ override-checkout: stable/wallaby # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.12 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/wallaby branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/wallaby branch + name: openstack/devstack override-checkout: stable/wallaby - name: openstack/openstacksdk override-checkout: stable/wallaby + vars: + tox_envlist: ansible-2.12 - job: name: ansible-collections-openstack-functional-devstack-victoria-ansible-2.12 - parent: ansible-collections-openstack-functional-devstack-ansible-2.12 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a victoria devstack using victoria branch of openstacksdk and stable 2.12 branch of ansible @@ -185,14 +232,29 @@ override-checkout: stable/victoria # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.12 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/victoria branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/victoria branch + name: openstack/devstack override-checkout: stable/victoria - name: openstack/openstacksdk override-checkout: stable/victoria + vars: + tox_envlist: ansible-2.12 - job: name: ansible-collections-openstack-functional-devstack-ussuri-ansible-2.11 - parent: ansible-collections-openstack-functional-devstack-ansible-2.11 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a ussuri devstack using ussuri branch of openstacksdk and stable 2.11 branch of ansible @@ -200,14 +262,29 @@ override-checkout: stable/ussuri # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.11 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/ussuri branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/ussuri branch + name: openstack/devstack override-checkout: stable/ussuri - name: openstack/openstacksdk override-checkout: stable/ussuri + vars: + tox_envlist: ansible-2.11 - job: name: ansible-collections-openstack-functional-devstack-train-ansible-2.11 - parent: ansible-collections-openstack-functional-devstack-ansible-2.11 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a train devstack using train branch of openstacksdk and stable 2.11 branch of ansible @@ -215,14 +292,29 @@ override-checkout: stable/train # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.11 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/train branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/train branch + name: openstack/devstack override-checkout: stable/train - name: openstack/openstacksdk override-checkout: stable/train + vars: + tox_envlist: ansible-2.11 - job: name: ansible-collections-openstack-functional-devstack-queens-ansible-2.11 - parent: ansible-collections-openstack-functional-devstack-ansible-2.11 + # Do not inherit from any parent job which does not run for branch stable/1.0.0 because Zuul would dismiss this job + # when collecting parent job variants. For example, when job.branches is set to master in a parent job, then Zuul + # will not match that job when it collects job variants. + # + # Do not inherit from any parent job which sets job.required-projects.override-checkout on openstack/devstack + # because Zuul would use that git ref instead of stable branch defined below to checkout projects of parent devstack + # jobs when collecting variants for parent jobs. + parent: ansible-collections-openstack-functional-devstack-base description: | Run openstack collections functional tests against a queens devstack using train branch of openstacksdk and stable 2.11 branch of ansible @@ -230,11 +322,19 @@ override-checkout: stable/queens # job.override-checkout will not override job.required-projects.override-checkout in parent jobs required-projects: - - name: openstack/devstack + - name: github.com/ansible/ansible + override-checkout: stable-2.11 + - # Choose parent devstack job from stable/1.0.0 branch instead of non-existing stable/queens branch + name: openstack/ansible-collections-openstack + override-checkout: stable/1.0.0 + - # Choose parent devstack job from stable/queens branch + name: openstack/devstack override-checkout: stable/queens - name: openstack/openstacksdk # Run queens with highest possible py2 version of SDK override-checkout: stable/train + vars: + tox_envlist: ansible-2.11 # Linters - job: