Feature flag rollout: `async_mr_pipeline_creation`
Summary
This issue is to roll out the async pipeline creation for new merge requests on production, that is currently behind the async_mr_pipeline_creation feature flag.
Related MR: !217381 (merged)
Owners
- Most appropriate Slack channel to reach out to:
#g_pipeline_authoring(new) - Best individual to reach out to: @lauraXD
Expectations
What are we expecting to happen?
When enabled, pipeline creation for new merge requests will be performed asynchronously via MergeRequests::CreatePipelineWorker instead of synchronously in NewMergeRequestWorker. This should reduce the P90 latency of NewMergeRequestWorker from over 3 seconds to under 1 second (S3 criteria target).
What can go wrong and how would we detect it?
- Pipeline creation could fail silently or be delayed, causing merge requests to appear without pipelines longer than expected
- Monitor
NewMergeRequestWorkerlatency metrics and pipeline creation success rates - Watch for increased errors in
MergeRequests::CreatePipelineWorker - Check for user reports of missing pipelines on newly created merge requests
Rollout Steps
Note: Please make sure to run the chatops commands in the Slack channel that gets impacted by the command.
Rollout on non-production environments
- Verify the MR with the feature flag is merged to
masterand has been deployed to non-production environments with/chatops run auto_deploy status <merge-commit-of-your-feature> - Enable the feature globally on non-production environments with
/chatops run feature set async_mr_pipeline_creation true --dev --pre --staging --staging-ref - Enable the feature on the gitlab project etc
/chatops gitlab run feature set --project=gitlab-org/gitlab,gitlab-org/gitlab-foss,gitlab-com/www-gitlab-com async_mr_pipeline_creation true - Verify that the feature works as expected. The best environment to validate the feature in is
staging-canaryas this is the first environment deployed to. Make sure you are configured to use canary. - If the feature flag causes end-to-end tests to fail, disable the feature flag on staging to avoid blocking deployments.
Preparation before global rollout
- Set a milestone to this rollout issue to signal for enabling and removing the feature flag when it is stable.
- Check if the feature flag change needs to be accompanied with a change management issue. Cross link the issue here if it does.
- Ensure that you or a representative in development can be available for at least 2 hours after feature flag updates in production.
- Incrementally roll out the feature on production.
/chatops gitlab run feature set async_mr_pipeline_creation 25 --actors/chatops gitlab run feature set async_mr_pipeline_creation 50 --actors/chatops gitlab run feature set async_mr_pipeline_creation 75 --actors/chatops gitlab run feature set async_mr_pipeline_creation 100 --actors- Between every step wait for at least 15 minutes and monitor the appropriate graphs on https://dashboards.gitlab.net.
- After the feature has been 100% enabled, wait for at least one day before releasing the feature.
Release the feature
- Create a merge request to remove the
async_mr_pipeline_creationfeature flag. The MR should include:- Remove all references to the feature flag from the codebase.
- Remove the YAML definitions for the feature from the repository.
- Ensure that the cleanup MR has been included in the release package.
- Once the cleanup MR has been deployed to production, clean up the feature flag from all environments:
/chatops run feature delete async_mr_pipeline_creation --dev --pre --staging --staging-ref --production - Close this rollout issue.
Rollback Steps
- This feature can be disabled on production by running the following Chatops command:
/chatops run feature set async_mr_pipeline_creation false
- Disable the feature flag on non-production environments:
/chatops run feature set async_mr_pipeline_creation false --dev --pre --staging --staging-ref
- Delete feature flag from all environments:
/chatops run feature delete async_mr_pipeline_creation --dev --pre --staging --staging-ref --production
Edited by Laura Montemayor