Support multi-version GitLab upgrade path in Operator
## Summary The GitLab Operator currently sets `SKIP_POST_DEPLOYMENT_MIGRATIONS` in the pre-migration job and always splits pre and post-deployment migrations. This enforces a ZDU (Zero Downtime Upgrade) migration pattern without explicitly calling this enforcement in the upgrade guidance and that can cause migration failures when jumping versions, as demonstrated in https://gitlab.com/gitlab-org/gitlab/-/issues/578331. ## Current behavior When upgrading GitLab using the Operator (e.g., from 18.3.5 to 18.5.1): 1. The Operator sets `SKIP_POST_DEPLOYMENT_MIGRATIONS=true` in the [pre-migration job](https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/controllers/gitlab/migration.go#L55) 2. Regular migrations run first (18.4 → 18.5 regular migrations) 3. Webservice/Sidekiq restart 4. Post-deployment migrations run later (18.4 → 18.5 post migrations) This creates a problematic migration order when skipping versions: - 18.4 regular migrations → 18.5 regular migrations → 18.4 post migrations → 18.5 post migrations However, the expected order for a downtime upgrade should be: - 18.4 regular → 18.4 post → 18.5 regular → 18.5 post (all at once) ## Problem The split migration approach can cause failures when: - A post-deployment migration in version N drops/modifies data - A regular migration in version N+1 expects that data to exist - Example: 18.4 post-deployment migration drops a table, but 18.5 regular migration expects it to exist ## Expected behavior The Operator should either: 1. Document requirement to follow minor upgrades at a time when using Operator 2. Split multi-version upgrades to ZDU mode or intoduce non-ZDU mode for such paths ## Versions - Operator: All versions ## Related discussions - Issue https://gitlab.com/gitlab-org/gitlab/-/issues/578331
issue