@@ -30,7 +30,8 @@ This is the consolidated operator and developer reference. The current [`Jenkins
3030
3131The guide covers:
3232
33- - the trusted production Pipeline-from-SCM job and GitHub pull-request webhook;
33+ - the trusted production Pipeline-from-SCM job and GitHub pull-request webhook, including first-PR cutover from
34+ ` feature/CSTACKEX-223 ` to ` main ` ([ ` CREATE-PRESUBMIT-JOB.md ` ] ( CREATE-PRESUBMIT-JOB.md ) );
3435- the separate triggerless manual branch job;
3536- local CI-file validation and direct disposable-VM validation;
3637- Stage 1 build, unit-test, and Debian package handoff;
@@ -102,6 +103,7 @@ private-cicd/
102103├── docker/
103104│ └── Dockerfile.driver
104105├── docs/
106+ │ ├── CREATE-PRESUBMIT-JOB.md
105107│ └── PRIVATE-CICD-GUIDE.md
106108└── scripts/
107109 ├── build-debs.sh
@@ -145,12 +147,22 @@ Lightweight checkout: off
145147PR code cannot replace trusted CI helpers before credentials are used. The source under test is checked out
146148separately.
147149
150+ Until ` feature/CSTACKEX-223 ` is merged, that Jenkinsfile is not on ` main ` . Create ** one** webhook job named
151+ ` cloudstack-ontap-presubmit ` that loads CI from ` */feature/CSTACKEX-223 ` , using
152+ [ ` CREATE-PRESUBMIT-JOB.md ` ] ( CREATE-PRESUBMIT-JOB.md ) . After merge, change only ** Branches to build**
153+ to ` */main ` . Keep the same job, webhook, GitHub App, credentials, and Check. Do not create a second production job
154+ and do not leave the feature branch as trusted CI after cutover.
155+
148156### Manual-job trust boundary
149157
150158A manual job may load the Jenkinsfile from an unreviewed remote feature branch. That branch can request every
151159credential visible to the job. Create a separate triggerless job, restrict Configure/Build permissions, expose only
152160least-privilege lab credentials, review the diff before every run, and never convert it into the webhook job.
153161
162+ The manual job is only triggerless while disabled. Because it loads the same Jenkinsfile, it also carries the
163+ Jenkinsfile's Generic Webhook Trigger and token. Keep ` cloudstack-presubmit-manual ` disabled and enable it only for
164+ the duration of a branch run, or use ` SOURCE_MODE=branch ` on the webhook job instead.
165+
154166### Secret boundaries
155167
156168Never commit populated inventory, real ` ontap.cfg ` , ` secrets.json ` , credentials, tokens, or private keys. Only
@@ -962,7 +974,7 @@ the build.
962974- [ ] credentials have correct Kinds and non-empty passwords;
963975- [ ] populated inventory remains outside Git;
964976- [ ] each enabled VM maps to a labeled resource and clean snapshot;
965- - [ ] production SCM is ` */main ` , lightweight off, and source checkout full;
977+ - [ ] production SCM is ` */main ` after CSTACKEX-223 is merged (until then ` */feature/CSTACKEX-223 ` ) , lightweight off, and source checkout full;
966978- [ ] first load applied parameters/trigger and only needed signatures are approved;
967979- [ ] parameterized PR smoke run passed;
968980- [ ] App installation, exact-SHA Check conclusion, and webhook HTTP 200 are proven;
0 commit comments