From 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 19 May 2021 15:44:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-12-stable-ee --- .gitlab/issue_templates/Feature Flag Roll Out.md | 144 ++++++++++++++--------- 1 file changed, 91 insertions(+), 53 deletions(-) (limited to '.gitlab/issue_templates/Feature Flag Roll Out.md') diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md index a67d0f4e31a..f07604d2d3d 100644 --- a/.gitlab/issue_templates/Feature Flag Roll Out.md +++ b/.gitlab/issue_templates/Feature Flag Roll Out.md @@ -1,11 +1,11 @@ -## Feature +## Summary -This feature uses the `:feature_name` feature flag! +This issue is to rollout [the feature](ISSUE LINK) on production, +that is currently behind the `` feature flag. -- [Issue Name](ISSUE LINK) ## Owners @@ -26,14 +26,15 @@ Are there any other stages or teams involved that need to be kept in the loop? ## The Rollout Plan -- Partial Rollout on GitLab.com with beta groups +- Partial Rollout on GitLab.com with testing groups - Rollout on GitLab.com for a certain period (How long) - Percentage Rollout on GitLab.com - Rollout Feature for everyone as soon as it's ready -**Beta Groups/Projects:** +## Testing Groups/Projects/Users + - `gitlab-org/gitlab` project @@ -55,60 +56,97 @@ Are there any other stages or teams involved that need to be kept in the loop? -## Rollout Timeline - - - -**Initial Rollout** - -*Preparation Phase* -- [ ] Enable on staging (`/chatops run feature set feature_name true --staging`) - -- [ ] Test on staging - -- [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)) - -- [ ] Announce on the issue an estimated time this will be enabled on GitLab.com - -*Partial Rollout Phase* -- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab feature_name true`) - -- [ ] Verify behaviour (See Beta Groups) and add details with screenshots as a comment on this issue - -- [ ] If it is possible to perform an incremental rollout, this should be preferred. Proposed increments are: `10%`, `50%`, `100%`. Proposed minimum time between increments is 15 minutes. - - When setting percentages, make sure that the feature works correctly between feature checks. See https://gitlab.com/gitlab-org/gitlab/-/issues/327117 for more information - - For actor-based rollout: `/chatops run feature set feature_name 10 --actors` - - For time-based rollout: `/chatops run feature set feature_name 10` - -- [ ] Make the feature flag enabled by default i.e. Change `default_enabled` to `true` - -- [ ] Cross post chatops slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel - - -**Cleanup** - -This is an __important__ phase, that should be either done in the next Milestone or as soon as possible. For the cleanup phase, please follow our documentation on how to [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up). - - -- [ ] Announce on the issue that the flag has been enabled - -- [ ] Remove `:feature_name` feature flag - - [ ] Remove all references to the feature flag from the codebase - - [ ] Remove the YAML definitions for the feature from the repository - - [ ] Create a Changelog Entry - -- [ ] Clean up the feature flag from all environments by running this chatops command in `#production` channel `/chatops run feature delete some_feature`. - -**Final Step** - -- [ ] Close this rollout issue for the feature flag after the feature flag is removed from the codebase. +## Rollout Steps + +### Rollout on non-production environments + +- [ ] Ensure that the feature MRs have been deployed to non-production environments. + - [ ] `/chatops run auto_deploy status ` +- [ ] Enable the feature globally on non-production environments. + - [ ] `/chatops run feature set true --dev` + - [ ] `/chatops run feature set true --staging` +- [ ] Verify that the feature works as expected. Posting the QA result in this issue is preferable. + +### Preparation before production rollout + +- [ ] Ensure that the feature MRs have been deployed to both production and canary. + - [ ] `/chatops run auto_deploy status ` +- [ ] Check if the feature flag change needs to be accompanied with a + [change management issue](https://about.gitlab.com/handbook/engineering/infrastructure/change-management/#feature-flags-and-the-change-management-process). + 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. + If a different developer will be covering, or an exception is needed, please inform the oncall SRE by using the `@sre-oncall` Slack alias. +- [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)). +- [ ] Announce on [the feature issue](ISSUE LINK) an estimated time this will be enabled on GitLab.com. +- [ ] If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), enable it on GitLab.com for [testing groups/projects](#testing-groupsprojectsusers). + - [ ] `/chatops run feature set --= true` +- [ ] Verify that the feature works as expected. Posting the QA result in this issue is preferable. + +### Global rollout on production + +- [ ] [Incrementally roll out](https://docs.gitlab.com/ee/development/feature_flags/controls.html#process) the feature. + - If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform **actor-based** rollout. + - [ ] `/chatops run feature set --actors` + - If the feature flag in code does **NOT** have [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform time-based rollout (**random** rollout). + - [ ] `/chatops run feature set ` + - Enable the feature globally on production environment. + - [ ] `/chatops run feature set true` +- [ ] Announce on [the feature issue](ISSUE LINK) that the feature has been globally enabled. +- [ ] Cross-post chatops slack command to `#support_gitlab-com`. + ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#communicate-the-change)) and in your team channel +- [ ] Wait for [at least one day for the verification term](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release). + +### (Optional) Release the feature with the feature flag + +If you're still unsure whether the feature is [deemed stable](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release) +but want to release it in the current milestone, you can change the default state of the feature flag to be enabled. +To do so, follow these steps: + +- [ ] Create a merge request with the following changes. Ask for review and merge it. + - [ ] Set the `default_enabled` attribute in [the feature flag definition](https://docs.gitlab.com/ee/development/feature_flags/#feature-flag-definition-and-validation) to `true`. + - [ ] Create [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog). +- [ ] Ensure that the above MR has been deployed to both production and canary. + If the merge request was deployed before [the code cutoff](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1), + the feature can be officially announced in a release blog post. + - [ ] `/chatops run auto_deploy status ` +- [ ] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone. + +**WARNING:** This approach has the downside that it makes it difficult for us to +[clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) the flag. +For example, on-premise users could disable the feature on their GitLab instance. But when you +remove the flag at some point, they suddenly see the feature as enabled and they can't roll it back +to the previous behavior. To avoid this potential breaking change, use this approach only for urgent +matters. + +### Release the feature + +After the feature has been [deemed stable](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release), +the [clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) +should be done as soon as possible to permanently enable the feature and reduce complexity in the +codebase. + + +- [ ] Create a merge request to remove `` feature flag. Ask for review and merge it. + - [ ] Remove all references to the feature flag from the codebase. + - [ ] Remove the YAML definitions for the feature from the repository. + - [ ] Create [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog). +- [ ] Ensure that the above MR has been deployed to both production and canary. + If the merge request was deployed before [the code cutoff](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1), + the feature can be officially announced in a release blog post. + - [ ] `/chatops run auto_deploy status ` +- [ ] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone. +- [ ] Clean up the feature flag from all environments by running these chatops command in `#production` channel: + - [ ] `/chatops run feature delete --dev` + - [ ] `/chatops run feature delete --staging` + - [ ] `/chatops run feature delete ` +- [ ] Close this rollout issue. ## Rollback Steps - [ ] This feature can be disabled by running the following Chatops command: ``` -/chatops run feature set --project=gitlab-org/gitlab feature_name false +/chatops run feature set false ``` /label ~"feature flag" -- cgit v1.2.3