Preparing boards and filters to be migrated 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 ended on 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
This document provides instructions on how to prepare the migration of all filters and boards with the Jira Cloud Migration Assistant, as described in this article.
Environment
Jira 7.6 and higher
Sanity Checks
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 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 owner. If the board owner or filter owner is inactive, on cloud, the board or filter becomes private and can no longer be accessed or modified.
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
The admin users running the migration must have Browse project permissions on all projects that are selected for migration.
Owners of all boards and filters must have Browse project permissions for the projects associated with those boards and filters.
Pre-migration checks
The changes below will require a DBA or a user who knows how to use SQL queries.
They involve changing your data at the database level, so be aware of the changes made.
To maximize the chance of success, it is recommended that you perform each of the following checks on your server instance before attempting a board and filter migration.
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 for and fix those filters and boards through the UI (unless they change the permissions at the 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
This pre-check is to prevent issues like this:
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 52)
The '@' is a reserved character, but on the server/DC, as long as you ensure that the Filters containing the '@' symbol have the email addresses enclosed by double quotes, this will allow the migration to occur and the filters to be functional on the Cloud site. There is no need to change it to the account ID, for example.
You can run the following SQL query to find all filters with personal data (email address) to confirm if they are in the correct format, for example:
project = "ABC" AND reporter = "username@yourcompany.com"
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.
If a username has multiple entries across directories with at least one entry marked as inactive, SQL queries may incorrectly identify the user as inactive. To ensure accuracy, check the user’s active status by referring to How to list all Users and Groups in Jira.
Boards owned by inactive users
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
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.
Once you have cleaned up your boards and filters, you can procceed to migrating your boards and filters.