Jira Cloud Migration Assistant のエラーや移行に関連しないエンティティのトラブルシューティング

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

背景

Jira Cloud Migration Assistant を使用してソフトウェア プロジェクトまたはユーザーとグループを移行しているときに、アクションを促す警告やエラーがアプリケーションによって表示されることがあります。このドキュメントでは、よくある移行のエラーの基本的なトラブルシューティング手順をご紹介します。

環境

  • Jira Cloud Migration Assistant 1.0 以降

データベースの変更を行う場合は必ず事前にバックアップを取得してください。可能な場合は、まずステージング サーバーで SQL コマンドの変更、挿入、更新、または削除を行うようにします。

移行エラーのダウンロード方法

移行の実行後にエラーが発生した旨が表示されます。移行のステータスは Incomplete と表示されます。

詳細なエラー ログのダウンロード方法

移行ダッシュボードで "View details" をクリックします

移行画面の "Download error logs" リンクをクリックします


これにより、試行した移行のエラーを含む .log ファイルを格納した zip ファイルがダウンロードされます。

エラー メッセージのトラブルシューティングを行う方法

エラー メッセージ

ERROR YYY project-import We couldn't import Permission Scheme 'XYZ scheme'.

Reason: IllegalStateException: Errors: {holder.parameter=User 'user.name' does not exist}

説明

移行で選択されたプロジェクトに、無効または存在しないユーザーを参照している権限スキームが関連付けられています。これらのユーザーは多くの場合、Crowd や外部のアイデンティティ プロバイダー (IdP) に含まれる、移行されていない古いアカウントです。

修正

  1. サーバー/DC インスタンスの対象の権限スキームから、参照されているユーザーを削除します。

  2. 権限スキームからユーザーを取り除いたり削除したりする方法についてはこちらのヘルプ ドキュメントをご確認ください。

  3. Jira Cloud Migration Assistant を通じて移行を再実行します。


エラー メッセージ

ERROR YYY project-export We couldn't export Work Log XXXXX.

Reason: java.lang.IllegalArgumentException: MRI entity id must not be blank.

説明

アトラシアンのクラウド製品のデータベース制約との互換性を持たない空白の値が作業履歴テーブルに存在します。これはこの挙動の影響で、オンプレミスで発生する可能性があります。

修正

空白の値を含む行を見つけ、それらを NULL に更新する必要があります。

  1. まず、次の SQL ステートメントを実行します。

    select * from worklog
  2. worklog テーブルの "grouplevel" コラムに注意を払います。

  3. 非 null の空白文字があった場合、次の SQL を実行してそれらを更新します。

    update worklog set grouplevel=null where grouplevel = "";
  4. Jira Cloud Migration Assistant を通じて移行を再実行します。


エラー メッセージ

ERROR YYY project-import We couldn't import Screen 'XYZ Screen Name'.

Reason: IllegalArgumentException: Tab name must not be blank.

説明

Jira に空白の画面名があります。

修正

UI を通じて空白の画面タブを見つけ、それらを更新します。

  1. Jira で [画面] に移動します

  2. エラー ログから、影響を受けている画面を見つけます。

  3. [構成] をクリックします。

  4. 空白の画面タブを見つけます。

  5. 空白のタブに名前を追加します。

  6. Jira Cloud Migration Assistant を通じて移行を再実行します。


エラー メッセージ

ERROR YYY project-import We couldn't import Field Layout Item XXXXX-customfield_XXXXX.

Reason: Field customfield_XXXXX does not exist in FieldLayout XXXXX.


ERROR YYY project-import We couldn't import Project YYY.

Reason: IllegalArgumentException: Issue type scheme [XXXXX] does not exist.


ERROR YYY project-import We couldn't import Project YYY.

Reason: IllegalArgumentException: Workflow scheme [XXXXX] does not exist.


ERROR YYY project-import We couldn't import Issue YYY-XXXX.

Reason: NullPointerException: There is no step in workflow [workflow] linked to status [status].

説明

過去に移行済みのエンティティがソースまたはターゲットのサイトで更新または削除されたため、移行に失敗しました。Jira Cloud Migration Assistant がデータを移行する方法をこちらでご確認ください。

修正

この方法を軽減するには、2 つの方法があります。

  • テスト サイトでこの問題が発生した場合、ターゲットのクラウド サイトをワイプして再度開始することで移行をリセットすることをご検討ください。ワイプ プロセスの詳細についてはこちらのドキュメントをご確認ください。

または


エラー メッセージ

ERROR YYY project-export We couldn't export Project Role 'Role_name'.

Reason: java.lang.IllegalArgumentException: Reference "role_name" is not a group reference.


ERROR YYY project-import We couldn't import Project Role Association XXXXX.

Reason: IllegalArgumentException: Project role [XXXXX] does not exist

説明

これらのエラーは、移行に含まれるプロジェクトに、存在しなくなったグループを参照しているロールまたは権限スキームがあることを示しています。

修正

この方法を軽減するには、2 つの方法があります。

  • 対象のロールやグループを再作成し、移行を再実行する前にソースのサーバーでそれらが存在するようにします。

または

  • プロジェクトの権限を編集し、移行を再実行する前にそれらのロールやグループへの参照を削除するようにします。

Jira プロジェクトでの権限やロールの編集方法についてはこちらのドキュメントをご確認ください。


エラー メッセージ

ERROR YYY project-export Board 'YYYY' is shared to users of other projects: group_name

Please remove these share permissions and re-create them after migration.

説明

移行に、移行に含まれないグループと共有されているボードが含まれています。

修正

ボードの共有フィルターを編集して参照を取り除きます。

  1. エラー ログに記載されているボードに移動します

  2. [ボード] > [構成] の順にクリックします。

  3. [一般] > [フィルター] > [フィルター共有の編集] を選択します。

  4. エラー ログに記載されているユーザーまたはグループを、対象のボードから削除します。

  5. Jira Cloud Migration Assistant を通じて移行を再実行します。


エラー メッセージ

ERROR YYY project-import We couldn't import Issue YYY-XXX.

Reason: Issue can be assigned to only closed sprints, and one active or future sprint during migration..

説明

ターゲットのサイトとソースのスプリントとの間に不一致があります。

  • 過去にアクティブなスプリントを持っていたが、そのスプリントがアクティブではなくなったプロジェクトを、クラウドに再移行しようとしています。

  • プロジェクトがクラウドで削除されたが、プロジェクトの削除時にスプリントが削除されませんでした。

  • プロジェクトがクラウドに再移行されました。

修正

  1. ソースのサイトでスプリントから課題を削除し、移行を再実行します。

  2. クラウドでアクティブなスプリントをサーバーでクローズし、移行を再試行します。

  3. これらの移行済みのスプリントをクラウド サイトから削除する方法については「Jira Cloud でスプリントを削除する」をご確認ください。


エラー メッセージ

We couldn't import Issue Watcher Association XXXX.

Reason: Insertion of IssueWatcherAssociations did not complete

説明

これは、ソース インスタンスで複数のユーザーが同じメール アドレスを共有しているときに発生する場合があります。

修正

  1. サーバー インスタンスで次の SQL を実行することで重複を確認します。

    select lower_email_address,count(lower_email_address) from cwd_user group by lower_email_address having count(lower_email_address) > 1
  2. ユーザーのメール アドレスのいずれかを削除または更新し、一意になるようにします。
  3. Jira Cloud Migration Assistant を通じて移行を再実行します。

エラー メッセージ

We found some email addresses that are connected to multiple users. To migrate, all users will need to have a unique email address.

Click on the user number to see which users the email is connected to.

説明

 各ユーザーは一意のメール アドレスを持つ必要があります (大文字と小文字は区別されません)。Jira Cloud Migration Assistant が、Jira のユーザー テーブルまたは同期されたアイデンティティ プロバイダーで同じメール アドレスを持つ複数のユーザーを検出した場合、このエラーが表示されます。

修正

  1. ユーザーのメール アドレスを一意になるように更新するか、サイトまたはアイデンティティ プロバイダーから完全に削除できます。

  2. Jira Software サーバー インスタンスでユーザーのメール アドレスを削除または編集する方法についてはこちらの手順に従ってください。

  3. Jira Cloud Migration Assistant を通じて移行を再実行します。

ヒント: 大量のユーザーが存在し、UI を通じた重複の確認が難しい場合は、ソース インスタンスで次の SQL を実行して、ユーザー テーブルで複数回参照されているメール アドレスを取得できます。

select lower_email_address,count(lower_email_address) from cwd_user group by lower_email_address having count(lower_email_address) > 1


移行アシスタントがサポートしないエンティティを調整および再作成する方法

一部のエンティティでは、Jira Cloud Migration Assistant を通じた移行がまだサポートされていません。エンティティの完全な一覧はこちらのドキュメントで確認できます。

ダッシュボードとフィルター

チームのダッシュボード/フィルターは、現在 Jira Cloud Migration Assistant でサポートされていません。つまり、これらはクラウド サイトで手動で再作成する必要があります。

フィルターについては、サーバー インスタンスで次の SQL クエリを使うことで、共有フィルターとそれらの権限を含む一覧を取得できます。

クリックして SQL を確認...
SELECT s.filtername, s.authorname as owner, s.reqcontent as jql, s.DESCRIPTION,sp.entityid, sp.sharetype, sp.PARAM1 FROM searchrequest s JOIN sharepermissions sp ON sp.entityid = s.ID WHERE sp.entitytype = 'SearchRequest' ORDER BY filtername;

非公開のフィルターを探すには次のクエリも使用できます。

クリックして SQL を確認...
SELECT filtername, authorname as owner, reqcontent as jql, DESCRIPTION FROM searchrequest WHERE ID NOT IN (SELECT entityid FROM sharepermissions WHERE entitytype = 'SearchRequest') ORDER BY filtername;

カスタム フィールド

次のカスタム フィールドは Jira Cloud Migration Assistant でサポートされていません。

  • 単一および複数バージョン ピッカー

  • URL

  • 選択リスト (カスケード)

  • 選択リスト (複数選択)

  • プロジェクト ピッカー 

CSV インポーターを使用して、移行の課題に関連するカスタム フィールド値のみを移動させることができます。詳細な手順についてはこちらのドキュメントの下部をご確認ください。


ワークフロー機能

現在、非ネイティブの Jira のワークフロー機能は Jira Cloud Migration Assistant でサポートされていません。つまり、これらを引き続き利用したい場合はクラウド サイトで再作成する必要があります。

  • 事後操作: フィールド値の消去、カスタム フィールドの更新、他のフィールドからの値のコピー、委任

  • バリデーター: 必須フィールド、変更されたフィールド

  • 条件: グループのユーザー、プロジェクト ロールのユーザー、フィールド値、サブタスクのブロック

移行前にサーバー インスタンスで次の SQL を実行して、影響を受ける可能性のあるワークフローを確認できます。

移行されるワークフローで、クラウドでネイティブではない事後操作を確認 (アドオン、アプリなど)

select * from (select t.*, jw.workflowname,  unnest(xpath('//action[@name="' || t.action || '"]/results/unconditional-result/post-functions/function/arg[@name="class.name"]/text()', 
             (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as post_function_class from jiraworkflows jw
             join (select id, unnest(xpath('//*/action/@name',  (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as action from jiraworkflows) t on t.id = jw.id ) a where post_function_class::text not like 'com.atlassian.jira%'

移行されるワークフローで、クラウドでネイティブではないバリデーターを確認 (アドオン、アプリなど)

select * from (select t.*, jw.workflowname,  unnest(xpath('//action[@name="' || t.action || '"]/validators/validator/arg[@name="class.name"]/text()', 
             (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as validators from jiraworkflows jw
             join (select id, unnest(xpath('//*/action/@name',  (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as action from jiraworkflows) t on t.id = jw.id ) a where validators::text not like 'com.atlassian.jira%'

移行されるワークフローで、クラウドでネイティブではない条件を確認 (アドオン、アプリなど)

select * from (select t.*, jw.workflowname,  unnest(xpath('//action[@name="' || t.action || '"]/restrict-to/conditions/condition/arg[@name="class.name"]/text()', 
             (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as conditions from jiraworkflows jw
             join (select id, unnest(xpath('//*/action/@name',  (regexp_replace(descriptor, '\<\![^\<]+\>', ''))::xml)) as action from jiraworkflows) t on t.id = jw.id ) a where conditions::text not like 'com.atlassian.jira%'

通知スキーム

次の SQL を実行して、サーバー インスタンスの通知スキームの詳細を確認します。非デフォルトの通知スキームはクラウド サイトで再作成する必要があります。

select * from notificationscheme;

メール ハンドラ

これらは移行後にターゲットのクラウド サイトで再作成する必要があります。メール ハンドラの再構成方法についてはこちらのドキュメントをご確認ください。

プロジェクト アバター

既知の回避策はありません。ターゲットのクラウド サイトに手動で再追加する必要があります。

移行されない課題やエンティティへのリンク

  • Jira のリモート リンクはまだサポートされていません。これらは再構築する必要があります。
  • プロジェクト間の課題リンクは、依存関係を持つすべてのプロジェクトと課題が移行されたあとにのみ表示されます。

カスタム フィールドでの言語の翻訳

既知の回避策はありません。ターゲットのクラウド サイトに手動で再追加する必要があります。

詳細情報とサポート

移行をサポートする多数のチャネルをご用意しています。

最終更新日 2022 年 1 月 11 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.