В GitLab CI есть возможность задавать условия для выполнения этапов (стадий) в pipeline, что можно использовать для того, чтобы сделать некоторые стадии необязательными для успешного завершения. Вы можете использовать параметр `when`, чтобы контролировать поведение ваших jobs в зависимости от состояния и других условий.
Если вы хотите, чтобы после успешного прохождения первых двух стадий (например, `build` и `test`) можно было влить изменения, вы можете настроить pipeline так, чтобы последняя стадия выполнялась только в определенных условиях, либо сделать ее необязательной. Например, можно использовать параметр `allow_failure`, чтобы не останавливать pipeline, если job не прошла, или использовать новый параметр `rules`.
Вот пример, как это можно сделать:
```yaml
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "Building the project..."
test_job:
stage: test
script:
- echo "Running tests..."
deploy_job:
stage: deploy
script:
- echo "Deploying the application..."
rules:
- if: '$CI_MERGE_REQUEST_ID' # Выполнять только для Merge Request`ов
- when: manual # Делает задачу ручной, т.е. необязательной
```
В этом примере:
- `build_job` и `test_job` являются обязательными и всегда выполняются.
- `deploy_job` будет запускаться только в том случае, если это Merge Request и только вручную.
Таким образом, если у вас все проходит в двух первых стадиях (`build` и `test`), вы сможете вручную запустить `deploy_job` для завершения процесса. Это даст вам возможность влить изменения, даже если final стадия завершится неуспешно или будет пропущена.
Также можно использовать другие условия, если они вам нужны. Например, если хотите пропустить стадию в других условиях или сделать её зависимой от каких-то значений переменных или окончаний предыдущих jobs.