Automation for Jira を 9.0.1 以上のバージョンにアップグレード後、自動化ルールを有効/無効にしたり公開したりできない

プラットフォームについて: Data Center のみ。 - この記事は、 Data Center プラットフォーム

この KB は Data Center バージョンの製品用に作成されています。Data Center 固有ではない機能の Data Center KB は、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。 Server* 製品のサポートは 2024 年 2 月 15 日に終了しました。Server 製品を実行している場合は、 アトラシアン Server サポート終了 のお知らせにアクセスして、移行オプションを確認してください。

*Fisheye および Crucible は除く

要約

Automation for Jira (A4J) を 9.0.1 より前のバージョンから 9.0.1 (またはそれ以降のバージョン) にアップグレードした後、次の問題が発生する可能性があります。

  • 一部の自動化ルールを有効化、無効化、公開することができない

    • ルールを有効または無効にしようとすると、UI に次のエラーが表示される

      自動化エラー - ルール更新時のエラー
      1 2 3 Error Error while updating rule. Error Please reload and try again.

    • ルールを公開しようとすると、UI に次のエラーが表示される

      ルール公開時の自動化エラー

      • An unknown error occurred. Please reload and try again.

  • また、(Jira 9.0.1 で導入された) シークレット キーの管理を⚙ > [システム] > [Automation for Jira] > [...] > [シークレット キーを管理] ぺージから行おうとすると、UI に次のエラーが表示されます。

    シークレット キーの管理試行時の自動化エラー

    • Something went wrong during the last request, please try again later.

診断

  • 次のアップグレードのいずれかがエラー発生前に実行されました。

    • アドオン Automation for Jira が (9.0.1 より前のバージョンから) 9.0.1 またはそれ以降のバージョンにアップグレードされ、その操作に ⚙ > [アプリを管理] > [アプリを管理] ぺージが使用された。

    • または、Jira Software アプリが (9.11.0 より前のバージョンから) 9.11.0 またはそれ以降バージョンにアップグレードされた

    • または、Jira Service Management アプリが (5.11.0 より前のバージョンから) 5.11.0 またはそれ以降のバージョンにアップグレードされた

  • Automation for Jira アプリは、ある時点で 7.3.0 より前のバージョンで Jira アプリケーションにインストールされました。

  • Jira アプリケーションは、次の 2 種類のデータベースのいずれかで構成されています。

    • MySQL

    • MS SQL Server

  • 次の 2 つのエラーのいずれかが Jira アプリケーション ログにあります。

    • エラー 1 (Jira が MS SQL で設定されている場合)

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 2023-08-31 14:53:40,570+0200 http-nio-80-exec-3 ERROR someuser 893x784x6 k0zbpv 0:0:0:0:0:0:0:1 /rest/cb-automation/latest/secrets/GLOBAL [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: Caught SQLServerException for select "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_SECRET_PROJ_ASSOC"."PROJECT_ID" from "jira"."AO_589059_RULE_SECRET" "AO_589059_RULE_SECRET" left join "jira"."AO_589059_SECRET_PROJ_ASSOC" "AO_589059_SECRET_PROJ_ASSOC" on "AO_589059_RULE_SECRET"."ID" = "AO_589059_SECRET_PROJ_ASSOC"."RULE_SECRET_ID" com.querydsl.core.QueryException: Caught SQLServerException for select "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_SECRET_PROJ_ASSOC"."PROJECT_ID" from "jira"."AO_589059_RULE_SECRET" "AO_589059_RULE_SECRET" left join "jira"."AO_589059_SECRET_PROJ_ASSOC" "AO_589059_SECRET_PROJ_ASSOC" on "AO_589059_RULE_SECRET"."ID" = "AO_589059_SECRET_PROJ_ASSOC"."RULE_SECRET_ID" at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50) at com.querydsl.sql.Configuration.translate(Configuration.java:459) at com.querydsl.sql.AbstractSQLQuery.iterateSingle(AbstractSQLQuery.java:410) at com.querydsl.sql.AbstractSQLQuery.iterate(AbstractSQLQuery.java:342) at com.querydsl.core.group.GroupByMap.transform(GroupByMap.java:54) at com.querydsl.core.group.GroupByMap.transform(GroupByMap.java:35) at com.querydsl.core.support.FetchableQueryBase.transform(FetchableQueryBase.java:55) at com.codebarrel.jira.plugin.automation.store.JiraRuleSecretStore.lambda$getAllSecrets$1(JiraRuleSecretStore.java:47) at com.codebarrel.data.api.jira.JiraDbConnectionManager.lambda$execute$0(JiraDbConnectionManager.java:47) at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:74) ... Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'jira.AO_589059_RULE_SECRET'. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:602) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:524) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7418) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:247) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:222)

    • エラー 2 (Jira が MySQL で設定されている場合)

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2023-09-05 12:15:27,855+0000 http-nio-8080-exec-128 ERROR someuser 735x28584544x4 dguzsz 0:0:0:0:0:0:0:1 /rest/cb-automation/latest/secrets/11901 [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: Caught SQLSyntaxErrorException for select `AO_589059_RULE_SECRET`.`ID`, `AO_589059_RULE_SECRET`.`KEY`, `AO_589059_RULE_SECRET`.`VALUE`, `AO_589059_RULE_SECRET`.`ID`, `AO_589059_RULE_SECRET`.`KEY`, `AO_589059_RULE_SECRET`.`VALUE`, `AO_589059_SECRET_PROJ_ASSOC`.`PROJECT_ID` from `AO_589059_RULE_SECRET` `AO_589059_RULE_SECRET` left join `AO_589059_SECRET_PROJ_ASSOC` `AO_589059_SECRET_PROJ_ASSOC` on `AO_589059_RULE_SECRET`.`ID` = `AO_589059_SECRET_PROJ_ASSOC`.`RULE_SECRET_ID` com.querydsl.core.QueryException: Caught SQLSyntaxErrorException for select `AO_589059_RULE_SECRET`.`ID`, `AO_589059_RULE_SECRET`.`KEY`, `AO_589059_RULE_SECRET`.`VALUE`, `AO_589059_RULE_SECRET`.`ID`, `AO_589059_RULE_SECRET`.`KEY`, `AO_589059_RULE_SECRET`.`VALUE`, `AO_589059_SECRET_PROJ_ASSOC`.`PROJECT_ID` from `AO_589059_RULE_SECRET` `AO_589059_RULE_SECRET` left join `AO_589059_SECRET_PROJ_ASSOC` `AO_589059_SECRET_PROJ_ASSOC` on `AO_589059_RULE_SECRET`.`ID` = `AO_589059_SECRET_PROJ_ASSOC`.`RULE_SECRET_ID` at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50) at com.querydsl.sql.Configuration.translate(Configuration.java:459) at com.querydsl.sql.AbstractSQLQuery.iterateSingle(AbstractSQLQuery.java:410) at com.querydsl.sql.AbstractSQLQuery.iterate(AbstractSQLQuery.java:342) at com.querydsl.core.group.GroupByMap.transform(GroupByMap.java:54) at com.querydsl.core.group.GroupByMap.transform(GroupByMap.java:35) at com.querydsl.core.support.FetchableQueryBase.transform(FetchableQueryBase.java:55) at com.codebarrel.jira.plugin.automation.store.JiraRuleSecretStore.lambda$getSecretsByProject$15(JiraRuleSecretStore.java:174) at com.codebarrel.data.api.jira.JiraDbConnectionManager.lambda$execute$0(JiraDbConnectionManager.java:47) at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:74) ... Caused by: java.sql.SQLSyntaxErrorException: Table 'jiradb.ao_589059_rule_secret' doesn't exist at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1009)

原因

SQL エラーは、A4J 9.0.1 で導入された DB テーブル「AO_589059_RULE_SECRET」が A4J のアップグレード中に作成できなかったことが原因で発生します。

A4J を下位バージョンから 7.3.0 にアップグレードする前に手動で実行する必要があった SQL スクリプトが実行されなかったため、テーブルを作成できませんでした

ドキュメンテーション「Automation for Jira 7.3 以降へのアップグレード」で説明されているように、次の 2 つの条件を満たす場合、データベース管理者は一部の SQL スクリプトを Jira DB で手動で実行する必要があります。

  • Jira は MySQL または MS SQL データベースのどちらかに接続されています

  • A4J を 7.3.0 よりも前のバージョンから、7.3.0 以降にアップグレードしようとしています

ある時点で A4J が 7.3.0 より前のバージョンにインストールされており、スクリプトが一度も実行されていない場合は、9.0.1 へのアップグレード後に次の事象が発生します。

  • (スクリプトが実行されていれば修正されているはずの) いくつかの DB 制約の問題が原因で、A4J がアップグレード タスクを完了できません

  • その結果、テーブル AO_589059_RULE_SECRET を作成できません

  • UI ではさまざまな問題が見られる

    • [⚙] > [システム] > [Automation for Jira] > [...] > [シークレット キーを管理] ページへのアクセスが

      何らかのエラーで失敗する

    • 一部の自動化ルールを編集または公開すると、何らかのエラーで失敗する

Bugfix

この問題を追跡するために、公開課題トラッカーに新しいバグ チケット https://jira.atlassian.com/browse/JIRAAUTOSERVER-844 が発行されています。

このバグの修正は、A4J バージョン 9.0.2 でリリースされました。これは、MySQL または MS SQL データベースを使用して Jira アプリケーション用の SQL スクリプトを実行することで構成されます。これは、ドキュメンテーション「Automation for Jira 7.3 以降へのアップグレード」に従って、A4J が 7.3 以降にアップグレードされたときに実行されるはずです。

: この修正は、A4J が 8.x から直接 9.0.2 以降のバージョンにアップグレードされた場合にのみ機能します。A4J がすでに 9.0.1 にアップグレードされていて、9.0.2 以降のバージョンにアップグレードする場合には役に立ちません。

ソリューション

バグ修正「https://jira.atlassian.com/browse/JIRAAUTOSERVER-844」は、8.x から 9.0.2 (またはそれ以降のバージョン) に直接アップグレードするお客様にのみ適用されるため、このバージョンにアップグレードしても、A4J がすでに 9.0.1 を使用している場合は機能しません。

このため、この問題を解決する唯一の方法は、次の手順に従って、Jira データベースでいくつかの SQL スクリプトを手動で実行することです。

  1. Jira アプリケーションを停止します

  2. Automation for Jira 7.3 のアップグレード」のステップ 5 に従って、Jira アプリケーションが使用するデータベースの種類に該当するスクリプト ファイルをダウンロードします

  3. スクリプトをデータベースで実行します

  4. Jira アプリケーションを起動します

SQL スクリプトに関する注意事項

注 1

外部キー制約を削除した後でもテーブルを変更する際にエラーが発生した場合、テーブルに予期しない外部キー制約があり、それを削除する必要がある可能性があります。 以下のクエリを実行して、テーブル内のすべての制約を特定できます。どれを削除すべきかわからない場合は、アトラシアン サポートにお問い合わせいただき、このクエリの結果を共有してください。

1 2 3 4 5 --MySQL select * from information_schema.KEY_COLUMN_USAGE where TABLE_NAME = '<table_name>'; --MSSQL SELECT * FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID('<table_name>');

注 2

MS SQL データベース用の SQL スクリプトを使用すると、次のエラーが発生する可能性があります。

インデックスが存在しないため、インデックスをスクリプトから削除できない。例:

1 2 Error executing query: SQL Error [3701] [S0007]: Cannot drop the index 'dbo.AO_589059_AUDIT_ITEM_PROJECT.index_ao_589059_aud2135433486', because it does not exist or you do not have permission.
  • インデックスがテーブル列に依存しているために変更できない。例:

1 2 3 The index 'nci_wi_AO_589059_AUDIT_ITEM_PROJECT_XXXXXXXXXXXX' is dependent on column 'AUDIT_ITEM_ID'. ALTER TABLE ALTER COLUMN AUDIT_ITEM_ID failed because one or more objects access this column.

これらのエラーは通常、A4J データベース テーブル用にカスタム インデックスが作成されていることが原因であり、すぐに使える A4J では発生しません。ドキュメンテーション「Automation for Jira 7.3 以降へのアップグレード」に記載されている SQL スクリプトは、すぐに使える A4J を使用して Jira アプリケーションで作成およびテストされました。

スクリプトのエラーを修正するには、次の手順に従うことをお勧めします。

次の SQL を実行して、A4J の DB テーブルで使用されるインデックスの完全なリストを取得します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 SELECT TableName = t.name, IndexName = ind.name, IndexId = ind.index_id, ColumnId = ic.index_column_id, ColumnName = col.name, ind.*, ic.*, col.* FROM sys.indexes ind INNER JOIN sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id INNER JOIN sys.tables t ON ind.object_id = t.object_id WHERE ind.is_primary_key = 0 AND ind.is_unique = 0 AND ind.is_unique_constraint = 0 AND t.is_ms_shipped = 0 AND t.name like 'AO_589059_%' ORDER BY t.name, ind.name, ind.index_id, ic.is_included_column, ic.key_ordinal;
  • インデックスの名前を反映して MS SQL スクリプトを更新してください

これらのエラーの修正方法に関する詳しいヘルプは、次のとおりです。

更新日時: 2024 年 6 月 7 日

さらにヘルプが必要ですか?

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