How to migrate all boards and filters with the Jira Cloud Migration Assistant (JCMA)
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products will end after February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Cross-project boards and filters can now be migrated to cloud using Jira Cloud Migration Assistant 1.10.0 and higher.
Purpose
The purpose of this document is to provide instructions on how to use the updated feature flags for migrating cross-project boards and filters via Jira Cloud Migration Assistant (JCMA).
IMPORTANT: Support, CMMs, and customers should be aware that feature flags are experimental. We’ll do our best to offer support if these feature flags break migrations. However, we can't guarantee fixes or incident responses. Feature flags don’t cover all edge cases. If using feature flags is the only option, test migrations thoroughly with the feature flags enabled. Consider manual workarounds when facing issues with feature flags.
Instructions
In this guide, we'll deal with specific features:
Cross-project boards and filters
Any boards not directly associated with the projects being migrated
Any boards/filters that belong to inactive/deleted users
Filters used by boards that are not migrated (including personal filters)
There are two important sets of instructions to follow:
When the feature flags are enabled, JCMA will not be able to show the migration progress for cross-project boards or all filters. Instead, you might see the following:
All items on the migration details have a green tick
The migration status shows Migration running or Migration incomplete (when an import side error happened for the final CROSS_PROJECT_DATA step)
Environment
Jira 7.6 and higher
Jira Cloud Migration Assistant version 1.7.8 or higher
Sanity Checks
The admin user running the migration plan in JCMA must have the "Browse Project" Permission on all projects that are being migrated. See the MIG-1089 bug for further reference.
Before migrating all boards and filters, there are some sanity checks (and minor fixes) that are required to be done on Jira Server's database.
JCMA only locates boards with projects if the filter refers to a single project. While migrating cross-project boards and filters, JCMA will set the location of the board to the board admin (owner). If that board admin or filter owner is inactive, JCMA may not assign the correct project location, so verifying such details will help you to migrate your boards and filters correctly.
Check the following before migrating all boards and filters:
Boards must be associated with valid filters
Board columns must be associated with valid statuses
Invalid JQL in the Quick Filter must be fixed
Personal data, such as email addresses, must be removed from any filters
Shared permissions settings must refer to valid groups
Boards/filters owned/created by inactive/deleted users must be assigned to valid owners
Pre-migration checks
The changes below will require a DBA or a user that knows how to use SQL queries.
They involve changing your data at the database level, so be aware of the changes made.
It is recommended that you perform each of the following checks on your server instance before attempting a migration of boards and filters to maximize the chance of success.
Boards linked to non-existent filters
If a Jira admin has deleted objects from the DB, or if the Jira version is old, there can be a loss of data integrity. This can also lead to inconsistencies, such as boards being linked to filters that no longer exist.
In addition, the Jira admin user who runs the migration may not have access to search/find and fix those filters and boards through the UI (unless they change the permission at DB level and restart Jira).
There are several ways to fix non-functioning (broken) boards listed below.
Filter columns linked to non-existent statuses (optional)
The latest version of JCMA can migrate a filter with a missing status, which can leave any board relying on the filter in a broken state. If you prefer to find and fix all such occurrences, do the following.
Invalid JQL in the Quick Filter
Any special characters in a filter might cause the migration process to fail with:
project-import We couldn't import Board <Board ID>. Reason: JQL in quick filter is invalid: Invalid JQL: Error in the JQL Query: The character '@' is a reserved JQL character. You must enclose it in a string or use the escape '\u0040' instead. (line 1, character 34).
See also the below section on email addresses.
Using the UI, update the JQL of the filter to remove unsupported characters.
Personal data, such as email addresses in filters
Any personal data, but email addresses in particular, may cause the following error:
Project-import We couldn't import Filter 'FILTER NAME'. Reason: Failed to sanitize personal data from query
Update the JQL of the filter to remove the user’s personal data.
Invalid groups in shared permissions (optional)
There are some cases in which a group is referenced in a filter’s shared permission configuration, but the group itself no longer exists in Jira. Although the filter will migrate, it may be broken or inaccessible. If you would rather mitigate the risk of migrating broken boards, check first. If you are migrating with scoped users & groups, a broken filter may also happen if the referenced group is not a part of the current plan.
Boards/Filters owned by inactive/deleted users
A migrated filter’s ownership may refer to a deactivated user on the cloud. The location of any associated cross-project boards will need to be fixed in a post-migration process. But fixing the owners pre-migration is a more feasible task.
Boards owned by inactive users
Fix 1 - Open the boards (listed in the output of the SQL SELECT query above) in Jira UI (board settings) and change their owners manually. If this is not possible or feasible, then proceed to the DB fix approach below.
Filters owned by inactive users
Fix 1 - Open the filters (listed in the output of the SQL SELECT query above) in Jira UI (board/filter settings) and change their owners
Boards owned by deleted users
Fix 1 - Open the boards (listed in the output of the SQL SELECT query above) in Jira UI (board settings) and change their owners
Filters owned by deleted users
Fix 1 - Open the filters (listed in the output of the SQL SELECT query above) in Jira UI (board/filter settings) and change their owners
Determining if you have multi-project boards
To get an indication of how many multi-project boards (and single-project boards) exist, use the following.
Migrating cross-project boards and all filters using Feature Flags
By default JCMA does not migrate cross-project boards or all filters. This feature is implemented behind Feature Flags (also known as Dark Features) that need to be enabled. See also Enable Dark Feature in Jira for detailed instructions on how to use feature flags. Similarly, private filters outside of the scope of the migration plan are not included.
Once all of the checks and changes (see the sections above) are done, add the following Feature Flags on the Jira Server instance:
com.atlassian.jira.migration.export.all.filters
com.atlassian.jira.migration.export.multiprojects.boards
When used in tandem, these flags will migrate
all filters, even if they have no relation to the projects included (this includes personal filters as well as filters referring to other projects not in the current plan)
all boards that relate to projects in the plan and also refer to projects outside the plan (cross-project boards)
To apply these Feature Flags, on your Jira Server instance:
Navigate to the URL:
${Jira_URL}/secure/admin/jira/views/SiteDarkFeatures!default.jspa
Enter the text of the Flag above.
Click Add (a Jira restart is not required).
To avoid version incompatibilities & minimize migration time, you should use the two Dark Features in only one JCMA plan (see the suggested approaches below).
JCMA will migrate all single-project boards and link them with their project location, if possible. Additionally, it will keep cross-project boards (containing a filter that refers to multiple projects) under the board owner's location, even when the board depends on projects that have not yet been migrated.
If you include these Dark Features in multiple plans, all included boards and filters will be migrated again, and this may cause duplication if there have been any changes to the boards or their filters on the server or cloud side between running the plans - this is called config drift (see below).
This means that the recommended path is one of:
Enable both Dark Features.
Run a full JCMA migration plan (all projects).
Once the plan has finished, disable both Dark Features.
OR
Do not enable either Dark Feature.
Migrate your projects with JCMA (in one or several plans, whichever works best for your scenario).
Once all projects are migrated, then enable both Dark Features.
Create a dummy project in Jira Server with a single Issue.
Run a JCMA migration plan only with that dummy project.
Once the plan has finished, disable both Dark Features.
Known issues
- MIG-169Getting issue details... STATUS
- MIG-269Getting issue details... STATUS
- MIG-1089Getting issue details... STATUS
Config drift
Any time a feature is migrated multiple times, there is a risk of config drift. Config drift usually occurs when configuration on the server side is changed between phases of migration - or even between the running of migration plans in JCMA. It can also occur if there are updates to the cloud side.
In the case of filters and boards, config drift can occur:
if you set both feature flags (above) for the duration of multiple plans (or migration phases)
if you change a filter or board relating to one project to be related to another between running plans (with or without feature flags)
The latter being unlikely, it is important to understand the risks of leaving the feature flags on, thereby allowing for a board or filter to be migrated multiple times.
Change between plans | Result | Special action |
---|---|---|
Filter (JQL) changed on server | No change to cloud | Delete filter (& board) on cloud before re-migrating |
Filter (JQL) changed on cloud | No change to cloud | |
Board (config) changed on server | Board config updated on cloud | |
Board (config) changed on cloud | Board config changes lost on cloud | Re-implement changes on cloud |