別の Jira インスタンスを示すように Jira 課題マクロを一括更新する方法
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
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.
*Fisheye および Crucible は除く
問題
Confluence ページに Jira リンクへの課題を作るには、Jira 課題マクロが使われます。これらのリンクには、リンクが参照する Jira インスタンスの ID が含まれます。
特定の状況において (ドメイン変更、移行、インスタンスの統合など)、これらのリンクを編集して別の Jira インスタンスを指すようにする必要があります。これを行わないと、Confluence ページに次のエラー メッセージが表示されます。
診断
A Jira Issue Macro link contains two identifiers; The Application Link ID and the Application Name. Should you encounter this issue, it is necessary to check if the Application Link ID and the Application Name is pointing to the correct Jira instance.
次の手順を行います。
まず、影響を受けるページに移動して Confluence の保存形式を確認します。
アプリケーション リンクの ID と アプリケーション名の値を記録します。次に、web ブラウザで次の URL にアクセスすることで、正しいアプリケーション リンク ID とアプリケーション名を特定します。
http://<Jira-Base-URL>/rest/applinks/1.0/manifest
最後に、ステップ 1 とステップ 2 の両方で特定したアプリケーション リンク ID とアプリケーション名を一致させる必要があります。
原因
この問題は、影響を受けるページのストレージ形式と宛先の Jira インスタンスとでアプリケーション リンク ID とアプリケーション名が異なるために発生します。
ソリューション
この例では、Jira 課題マクロのリンクを、アプリ リンク ID 79f0263c-a3a5-323b-870c-aea1895cabeb および名前 Jira Old からアプリ リンク ID 144880e9-a353-312f-9412-ed028e8166fa および名前 Atlassian Jira に変更しています。
すべての Jira 課題マクロ情報は、次の例のように BODYCONTENT
テーブルに含まれます。
<p><ac:structured-macro ac:name="Jira"><ac:parameter ac:name="columns">key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution</ac:parameter>
<ac:parameter ac:name="server">Jira Old</ac:parameter><ac:parameter ac:name="serverId">79f0263c-a3a5-323b-870c-aea1895cabeb</ac:parameter>
<ac:parameter ac:name="key">TST-1</ac:parameter></ac:structured-macro></p>
If the affected instance is on Confluence 7 or newer, make sure to update the Drafts to use changes on the next opening of the draft, If on the older Confluence version, skip to the update of BODYCONTENT:
UPDATE CONTENTPROPERTIES set stringval='synchrony-recovery' WHERE PROPERTYID in (SELECT cp.PROPERTYID FROM BODYCONTENT bc JOIN CONTENTPROPERTIES cp ON cp.CONTENTID = bc.CONTENTID WHERE bc.BODY like '%<old_string>%' AND cp.PROPERTYNAME = 'sync-rev-source');
BODYCONTENT
テーブルの情報を更新するには、次の SQL ステートメントを使用します。
UPDATE BODYCONTENT
SET BODY = REPLACE(BODY,'<old_string>','<new_string>');
MSSQL の場合は次のようなクエリを使います。
UPDATE BODYCONTENT
SET BODY = CAST(REPLACE(CAST(BODY as nvarchar(max)),'<old_string>','<new_string>') as ntext);
ここで、<old_string> は BODY フィールドで探す文字列であり、<new_string> で置き換えられます。
データベースを変更する前には必ずデータをバックアップするようにします。
Confluence 6.x 以降で、共同編集がオンまたは制限付きに設定されている場合、上述のデータベース操作を行う前に共同編集を無効化し、変更後、 Confluence の再起動後に再度有効化します。これは、Synchrony のキャッシュで新しい値を取得できるようにするためです。
Per Administering Collaborative Editing, it's a good idea to prompt your users to publish any shared drafts before you turn collaborative editing off, as they will not be able to resume editing existing shared drafts or unpublished changes.
- Confluence をシャットダウンします。
次の SQL アップデート ステートメントを実行します。
UPDATE BODYCONTENT SET BODY = REPLACE(BODY, '<ac:parameter ac:name="server">Jira Old</ac:parameter>', '<ac:parameter ac:name="server">Atlassian Jira</ac:parameter>'); UPDATE BODYCONTENT SET BODY = REPLACE(BODY, '<ac:parameter ac:name="serverId">79f0263c-a3a5-323b-870c-aea1895cabeb</ac:parameter>', '<ac:parameter ac:name="serverId">144880e9-a353-312f-9412-ed028e8166fa</ac:parameter>');
UPDATE BODYCONTENT SET BODY = CAST(REPLACE(CAST(BODY as nvarchar(max)),'<ac:parameter ac:name="server">Jira Old</ac:parameter>', '<ac:parameter ac:name="server">Atlassian Jira</ac:parameter>') as ntext); UPDATE BODYCONTENT SET BODY = CAST(REPLACE(CAST(BODY as nvarchar(max)),'<ac:parameter ac:name="serverId">Jira Old ServerID</ac:parameter>', '<ac:parameter ac:name="serverId">Atlassian Jira ServerID</ac:parameter>') as ntext);
すべてのページに影響を与えたくない場合は条件を追加することもできます。次の SQL クエリは、spacekey - 'KEY' のスペースのコンテンツのみを更新します。
-
You may wish to verify that the content in the database has been updated before/after your UPDATE query has been set. Please engage with your DBA if needed, but you can select using the criteria below:
SELECT FROM CONTENTPROPERTIES WHERE PROPERTYID in ( SELECT cp.PROPERTYID FROM BODYCONTENT bc JOIN CONTENTPROPERTIES cp ON cp.CONTENTID = bc.CONTENTID WHERE bc.BODY like '%<ac:parameter ac:name="serverId">the-id-of-the-old-applink</ac:parameter>%' );
- Confluence を再起動します。