# TripleO CI Zuul Job Reparenting ## Existing parenting Story * CentOS-8 base jobs are created by duplicating the centos-7 base jobs * https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/base.yaml#L198 * https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/base.yaml#L227 * By using centos-8 jobs as a parent, we created centos-9 jobs. * Everything was good, till we were running c8 and c9 jobs on master * While adding support for running cs9 jobs on wallaby, * We changed the branches job attribute for cs8 jobs to run only on stable/branches only * triggered cs9 jobs on stable/wallaby, jobs were not running on stable/wallaby branch * for fixing it, we added the branch name at pipeline level * https://opendev.org/openstack/tripleo-ci/commit/bda6e1a61a846890c9cc39d0bc91952e9c6deb8f * But things were looking messy. * We also started seeing zuul job freeze graph issues, due to irrelevant files and files matching * In Downstream, we fork the upstream projects and have different branches and project namespaces * We override the required jobs with respective branches * We are duplicating the job definitions in RDO and Downstream * if we change a var in upstream, then we need 2 patches for downstream and RDO * https://opendev.org/openstack/tripleo-ci/src/commit/04ce9923d0bfdc800b159a73f380e5843c6c7af3/zuul.d/standalone-jobs.yaml#L829 * https://github.com/rdo-infra/rdo-jobs/blob/master/zuul.d/standalone-jobs.yaml#L398 * In RDO and Downstream, tripleo-ci base jobs are used as a parent in config repo (trusted repo) so hard to test the base job chnages * We also keep distro specific workarounds either in Release file or with in the code base * Which are kind of hard to find and track down. * When a release gets EOL, then it is very hard to remove the jobs definition easily ## Rethinking reparenting We needed a clear Zuul job inheritance order - with project names based on upstream, rdo and downstream - with proper distribution version specification - Less duplication of zuul jobs vars With keeping in mind, we come up with following Inheritnace. - First base with common required projects: https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/base-upstream.yaml - tripleo-ci-base-standard - From here, different deployment based base gets created - for examples: - tripleo-ci-base-singlenode - It can be used for undercloud - tripleo-ci-base-containers-standard https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/base-upstream.yaml#L244 - tripleo-ci-base-images-standard - For each level, (for example standalone) - we have required project job - Upstream: https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/standalone-jobs.yaml#L7 - RDO: https://github.com/rdo-infra/rdo-jobs/blob/master/zuul.d/standalone-jobs.yaml#L12 - Then we have distro version specific jobs - https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/standalone-jobs.yaml#L18 - https://github.com/rdo-infra/review.rdoproject.org-config/commit/dc1c566b859d78b0b54b72db78e601574856dea3 - Then modify the existing the openstack release based jobs based on distros - https://opendev.org/openstack/tripleo-ci/src/branch/master/zuul.d/standalone-jobs.yaml#L84 - https://github.com/rdo-infra/rdo-jobs/blob/master/zuul.d/standalone-jobs.yaml#L418 ## Current Status: With CentOS-8 wallaby teardown in progress, we have finished, - container-multinode, standalone, build-containers, build-images at all levels Doc review in progress: https://f3e11e61cbb35cb84889-397caf381a73cd99b004eb00bbac7fbc.ssl.cf1.rackcdn.com/835782/8/check/openstack-tox-docs/1f92a42/docs/ci/tripleo_ci_job_parenting.html Patches in flight for review: https://review.opendev.org/q/hashtag:cs-parenting+(status:open%20OR%20status:merged ## Thank You! ======= Below design brainstorming======= ## Required projects - tripleo-ci-base-required-projects - https://review.opendev.org/c/openstack/tripleo-ci/+/830836 ## Tripleo CI Base jobs - tripleo-ci-base jobs - https://review.opendev.org/c/openstack/tripleo-ci/+/831201 ## Tripleo CI Standalone jobs - standalone jobs - https://review.opendev.org/c/openstack/tripleo-ci/+/821849 - https://review.opendev.org/c/openstack/tripleo-ci/+/830987 - https://review.rdoproject.org/r/q/topic:cs-parenting-standalone ## Tripleo CI Multinode jobs - tripleo-ci-base-multinode-standard - https://review.opendev.org/c/openstack/tripleo-ci/+/831151 - https://review.opendev.org/q/topic:cs-parenting-multinode ## Tripelo CI Parenting Structure ## Common parent * tripleo-ci-base-common-required-projects * tripleo-ci-base In Case of Multinode ## Common parent for Multinode * tripleo-ci-base * tripleo-ci-base-multinode-standard ### parent for Upstream Multinode * tripleo-ci-base-multinode-standard * **tripleo-ci-base-required-projects-upstream-multinode ** * tripleo-ci-base-multinodee-centos-8 ### parent for RDO multinode * tripleo-ci-base-multinode-standard * tripleo-ci-base-required-projects-rdo-multinode (holds secrets, dlrn reporting will stay in config) - May be dlrn reporting or other part in seperate job * tripleo-ci-base-multinode-rdo-centos-9 (jobs repos) ### parent for Downstream Multinode * tripleo-ci-base-multinode-standard * tripleo-ci-base-required-projects-downstream-multinode (holds secrets, dlrn reporting will stay in config) * tripleo-ci-base-multinode-rhel-9 ## Common parent for standalone tripleo-ci-base tripleo-ci-base-standalone-standard ### Standalone Upstream Parent tripleo-ci-base-standalone-standard tripleo-ci-base-required-projects-upstream-standalone tripleo-ci-base-standalone-centos-8 ### Standalone Downstream Parent tripleo-ci-base-standalone-standard tripleo-ci-base-required-projects-downstream-standalone tripleo-ci-base-standalone-rhel-9 In Case of OVB ## Common parent for OVB tripleo-ci-base tripleo-ci-base-ovb-standard ## parent for ovb upstream tripleo-ci-base-ovb-standard tripleo-ci-base-ovb-required-projects-upstream tripleo-ci-base-ovb-centos-8 ## parent for ovb Downstream tripleo-ci-base-ovb-standard tripleo-ci-base-ovb-required-projects-downstream tripleo-ci-base-ovb-rhel-9 ## Parent for ovb RDO tripleo-ci-base-ovb-standard tripleo-ci-base-ovb-required-projects-rdo (It will take the place of tripleo-ci-base-ovb-notebroker-centos-8) tripleo-ci-base-ovb-periodic-centos-8