Automation for Jira が原因で Jira 課題の一括操作が遅くなる

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

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

*Fisheye および Crucible は除く

要約

Jira 課題の一括更新 (フィールドの更新やワークフローのトランジションなど) を実行する場合、Automation for Jira が有効になっていると、操作が完了するまでにかなりの時間がかかります。

このナレッジ記事の目的は、Automation for Jira が一括操作のパフォーマンスに影響を与える理由と、影響を軽減する方法を説明することです。

診断

Automation for Jira が一括操作のパフォーマンスに影響を与えていることの確認

  • Automation for Jira (A4J) を有効にしたときと無効にしたときの一括操作のパフォーマンスを比較します。A4J が無効なときに操作が大幅に速くなる場合は、次のステップに進みます。以下に例を示します。

    • Automation for Jira が有効になっている場合、次のように、一括操作に 5 分以上かかっています。

      課題を編集するための一括操作に 5 分 55 秒かかっています

    • Automation for Jira が無効になっている場合、次のように、一括操作は 1 秒未満で完了しています。

      課題を編集するための一括操作に 0 秒かかっています

  • 一括操作の実行中にスレッド ダンプを生成します。

    • 名前が JiraTaskExecutionThread-X という形式 (JiraTaskExecutionThread-3 など) になっている、実行時間が長いスレッドを探します。例:

       JiraTaskExecutionThread-X

  • 実行時間が長いスレッドのスタック トレースをチェックして、次のようなクラスを探します。

    • com.codebarrel.jira.plugin.automation.event.JiraIssueEventListenerImpl.handleEvent(JiraIssueEventListenerImpl.java:60)

  • スタック トレースの例:

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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 java.io.PrintWriter.print(java.base@11.0.21/PrintWriter.java:686) java.io.PrintWriter.println(java.base@11.0.21/PrintWriter.java:822) jdk.internal.reflect.GeneratedMethodAccessor1724.invoke(java.base@11.0.21/Unknown Source) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.21/DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(java.base@11.0.21/Method.java:566) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1336) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1091) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1009) org.codehaus.groovy.runtime.InvokerHelper.invokePojoMethod(InvokerHelper.java:633) org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:624) groovy.lang.Script.println(Script.java:181) jdk.internal.reflect.GeneratedMethodAccessor1723.invoke(Unknown Source) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.21/DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(java.base@11.0.21/Method.java:566) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1336) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1091) groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:258) org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63) org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185) Script4.run(Script4.groovy:2) org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:331) org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:161) javax.script.AbstractScriptEngine.eval(java.scripting@11.0.21/AbstractScriptEngine.java:233) javax.script.ScriptEngine$eval.call(Unknown Source) com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScriptAndGetContext(AbstractScriptRunner.groovy:189) com.onresolve.scriptrunner.runner.AbstractScriptRunner$runScriptAndGetContext$1.callCurrent(Unknown Source) com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScriptAndGetContext(AbstractScriptRunner.groovy:308) com.onresolve.scriptrunner.runner.AbstractScriptRunner$runScriptAndGetContext$0.callCurrent(Unknown Source) com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScript(AbstractScriptRunner.groovy:320) com.onresolve.scriptrunner.runner.ScriptRunner$runScript$9.call(Unknown Source) com.onresolve.scriptrunner.automation.AbstractExecuteScriptAction.executeScript(AbstractExecuteScriptAction.groovy:131) jdk.internal.reflect.GeneratedMethodAccessor1544.invoke(Unknown Source) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.21/DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(java.base@11.0.21/Method.java:566) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:342) org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:63) org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203) com.onresolve.scriptrunner.automation.AbstractExecuteScriptAction$_execute_closure5.doCall(AbstractExecuteScriptAction.groovy:108) jdk.internal.reflect.GeneratedMethodAccessor1543.invoke(Unknown Source) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.21/DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(java.base@11.0.21/Method.java:566) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:279) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1009) groovy.lang.Closure.call(Closure.java:418) groovy.lang.Closure.call(Closure.java:434) org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2386) org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2371) org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2412) org.codehaus.groovy.runtime.dgm$203.invoke(Unknown Source) org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:253) org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:57) org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) com.onresolve.scriptrunner.automation.AbstractExecuteScriptAction.execute(AbstractExecuteScriptAction.groovy:105) com.codebarrel.jira.plugin.automation.thirdparty.ThirdPartyComponentExecutor.execute(ThirdPartyComponentExecutor.java:49) com.codebarrel.automation.api.service.ComponentChainImpl.doExecute(ComponentChainImpl.java:76) com.codebarrel.automation.api.service.SingleRuleExecutorServiceImpl.execute(SingleRuleExecutorServiceImpl.java:238) com.codebarrel.jira.plugin.automation.service.execution.JiraAutomationExecutionService.runRule(JiraAutomationExecutionService.java:72) com.codebarrel.jira.plugin.automation.service.execution.JiraAutomationExecutionService.lambda$processEventWithRuleSynchronously$1(JiraAutomationExecutionService.java:57) com.codebarrel.jira.plugin.automation.service.execution.JiraAutomationExecutionService$$Lambda$5828/0x0000000843f1c440.run(Unknown Source) com.codebarrel.jira.plugin.automation.service.execution.JiraThreadLocalExecutor.lambda$executeAsSynchronous$1(JiraThreadLocalExecutor.java:45) com.codebarrel.jira.plugin.automation.service.execution.JiraThreadLocalExecutor$$Lambda$5829/0x0000000843f1c840.call(Unknown Source) com.codebarrel.jira.plugin.automation.service.execution.JiraThreadLocalExecutor.executeAsWithResult(JiraThreadLocalExecutor.java:67) com.codebarrel.jira.plugin.automation.service.execution.JiraThreadLocalExecutor.executeAsSynchronous(JiraThreadLocalExecutor.java:44) com.codebarrel.jira.plugin.automation.service.execution.JiraAutomationExecutionService.processEventWithRuleSynchronously(JiraAutomationExecutionService.java:56) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry.lambda$executeEventRules$20(DefaultEventRuleRegistry.java:516) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry$$Lambda$5673/0x0000000843eb7c40.accept(Unknown Source) java.util.ArrayList.forEach(java.base@11.0.21/ArrayList.java:1541) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry.executeEventRules(DefaultEventRuleRegistry.java:506) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry.lambda$handleIssueEventBundle$3(DefaultEventRuleRegistry.java:233) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry$$Lambda$5634/0x0000000843eab040.accept(Unknown Source) java.util.ArrayList.forEach(java.base@11.0.21/ArrayList.java:1541) com.codebarrel.jira.plugin.automation.event.DefaultEventRuleRegistry.handleIssueEventBundle(DefaultEventRuleRegistry.java:221) com.codebarrel.jira.plugin.automation.event.JiraIssueEventListenerImpl.handleEvent(JiraIssueEventListenerImpl.java:60) jdk.internal.reflect.GeneratedMethodAccessor1495.invoke(Unknown Source) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.21/DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(java.base@11.0.21/Method.java:566) com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:42) com.atlassian.diagnostics.internal.platform.monitor.event.EventSystemMonitor.invokeMonitored(EventSystemMonitor.java:105) com.atlassian.diagnostics.internal.platform.monitor.event.MonitoredListenerInvoker.invoke(MonitoredListenerInvoker.java:38) com.atlassian.event.internal.ComparableListenerInvoker.invoke(ComparableListenerInvoker.java:48) com.atlassian.event.internal.AsynchronousAbleEventDispatcher.lambda$null$0(AsynchronousAbleEventDispatcher.java:37) com.atlassian.event.internal.AsynchronousAbleEventDispatcher$$Lambda$630/0x0000000840843840.run(Unknown Source) com.atlassian.event.internal.AsynchronousAbleEventDispatcher$$Lambda$212/0x00000008402f5840.execute(Unknown Source) com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:85) com.atlassian.diagnostics.internal.platform.monitor.event.MonitoredEventDispatcher.dispatch(MonitoredEventDispatcher.java:36) com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:114) com.atlassian.event.internal.LockFreeEventPublisher.publish(LockFreeEventPublisher.java:40) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.publishEvent(TxnAwareEventFactoryImpl.java:210) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.lambda$publishOnCommitIssueEventBundle$4(TxnAwareEventFactoryImpl.java:98) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl$$Lambda$5618/0x0000000843ea7040.accept(Unknown Source) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.lambda$runThisOnCommit$8(TxnAwareEventFactoryImpl.java:192) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl$$Lambda$5559/0x0000000843e78440.run(Unknown Source) com.atlassian.ozymandias.SafePluginPointAccess.runnable(SafePluginPointAccess.java:404) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.runThisOnCommit(TxnAwareEventFactoryImpl.java:192) com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.publishOnCommitIssueEventBundle(TxnAwareEventFactoryImpl.java:80) com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundleOnCommitIfNotificationsAreEnabled(DefaultIssueEventManager.java:192) com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundleOnCommit(DefaultIssueEventManager.java:149) com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundle(DefaultIssueEventManager.java:134) com.atlassian.jira.event.issue.IssueEventManager.dispatchEvent(IssueEventManager.java:284) com.atlassian.jira.issue.util.DefaultIssueUpdater.storeModifiedFields(DefaultIssueUpdater.java:164) com.atlassian.jira.issue.util.DefaultIssueUpdater.doUpdate(DefaultIssueUpdater.java:94) com.atlassian.jira.issue.util.DefaultIssueUpdater.doUpdate(DefaultIssueUpdater.java:68) com.atlassian.jira.issue.managers.DefaultIssueManager.doUpdate(DefaultIssueManager.java:702) com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:673) com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:652) com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:217) com.atlassian.jira.bulkedit.operation.BulkEditOperation.perform(BulkEditOperation.java:216) com.atlassian.jira.web.action.issue.bulkedit.BulkOperationProgress$BulkEditCallable.call(BulkOperationProgress.java:174) com.atlassian.jira.web.action.issue.bulkedit.BulkOperationProgress$BulkEditCallable.call(BulkOperationProgress.java:144) com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:528) com.atlassian.jira.task.TaskManagerImpl$TaskCallableDecorator.call(TaskManagerImpl.java:486) java.util.concurrent.FutureTask.run(java.base@11.0.21/FutureTask.java:264) java.util.concurrent.Executors$RunnableAdapter.call(java.base@11.0.21/Executors.java:515) java.util.concurrent.FutureTask.run(java.base@11.0.21/FutureTask.java:264) com.atlassian.jira.task.ForkedThreadExecutor$ForkedRunnableDecorator.run(ForkedThreadExecutor.java:216) java.lang.Thread.run(java.base@11.0.21/Thread.java:829)
  • 次のように、com.onresolve.scriptrunner. で始まるクラスも見つかる場合もあります。これは、自動化ルールが ScriptRunner スクリプトを実行するように設定されていることを示しています。

    ScriptRunner スクリプト

  • com.codebarrel.Jira というクラスが、

    一括編集操作を実行している、実行時間が長いスレッド JiraTaskExecutionThread-X に見つかった場合、この記事が該当しています。このルールが一括編集のパフォーマンスに影響を与えているかどうかを確認する必要があります。

問題のあるルールの特定

第 1 の方法

  • この方法では、以下の手順に従って、Automation for Jira に関連するデバッグ パッケージを有効にします。

    • ⚙ > [システム] > [ログとプロファイル] に移動します。

    • [別のパッケージのログ レベルを設定] をクリックし、以下の 2 つのパッケージを DEBUG モードで追加します。

      • com.codebarrel.automation

      • com.codebarrel.jira.plugin.automation

  • 一括編集操作を再度実行します。

  • Jira アプリケーションのログをチェックして、以下のスニペットのようなログを探します。

    1 2 3 4 5 6 7 2023-12-19 10:53:49,275+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.j.p.automation.event.DefaultEventRuleRegistry] Processing rule 'Rule executing script on priority update' for event 'jira:issue_updated:issue_updated' synchronously... 2023-12-19 10:53:49,276+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.a.r.j.trigger.fieldchanged.FieldChangedTriggerExecutor] FVCT canHandle called 2023-12-19 10:53:49,276+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.a.r.j.trigger.fieldchanged.FieldChangedTriggerExecutor] Rule ID [5], component ID [36]: Invoking FVCT matcher... 2023-12-19 10:53:49,276+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.a.r.j.trigger.fieldchanged.FieldChangedTriggerExecutor] FVCT trying to match change for event 'AutomationEvent{traceId=1ee3a293-bf6d-4037-a4c3-21fd82c99559, clientKey='com.codebarrel.tenant.global', triggerType=EVENT, type='jira:issue_updated:issue_updated', projectIds=[10001], timestamp=Tue Dec 19 10:53:49 UTC 2023, authorAccountId='admin', auditItemBatchId=null, payload='{"timestamp":1702983229266,"webhookEvent":"jira:issue_updated","properties":[],"comment":null,"issue":{"self":"https://linux-59616.prod.atl-cd.net/jira/rest/api/2/issue/10029","id":10029,"key":"KANBAN-7","changelog":{"startAt":0,"maxResults":0,"total":0,"histories":null},"fields":{"issuetype":{"self":"https://linux-59616.prod.atl-cd.net/jira/rest/api/2/issuetype/10004","id":10004,"description":"A problem which impairs or prevents the functions of the product.","iconUrl":"https://linux-59616.prod.atl-cd.net/jira/secure/viewavatar?size=xsmall&avatarId=10303&avatarType=issuetype","name":"Bug","subtask":false,"fields":null,"statuses":[],"namedValue":"Bug"},"timespent":null,"project":{"self":"https://linux-59616.prod.atl-cd.net/jira/rest/api/2/project/10001","id":10001,"key":"KANBAN","name":"KANBAN","description":null,"avatarUrls":{"48x48":"https://linux-59616.prod.atl-cd.net/jira/secure/projectavatar?avatarId=10324","24x24":"https://linux-59616.prod.atl-cd.net/jira/secure/projectavatar?...', ignoreOwnEvents=true, authorAutomationAddon=false, priority=5}' with config: MultiFieldChangedTriggerConfig{fields=[FieldChangedConfig{value='priority', type=field}], actions=[]} 2023-12-19 10:53:49,276+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.a.r.j.trigger.fieldchanged.FieldChangedTriggerExecutor] FVCT actions matched: true 2023-12-19 10:53:49,276+0000 JiraTaskExecutionThread-3 DEBUG admin 653x966x1 135mh8k 172.29.220.106,172.50.0.2 /secure/views/bulkedit/BulkEditPerform.jspa [c.c.a.r.j.trigger.fieldchanged.FieldChangedTriggerExecutor] FVCT matching against issue KANBAN-7. Rule ID [5], component ID [36].
  • 上のコード スニペットでは、ID = 5 で名前が「Rule executing script on priority update」という自動化ルールが、一括操作中にトリガーされ実行される自動化ルールであることがわかります。

第 2 の方法

  • 一括操作のパフォーマンスに影響を与える可能性のある「問題のある自動化ルール」を探すもう 1 つの方法は、以下の SQL クエリを実行することです。このクエリの目的は、割り当てやトランジションなどによって課題が更新されたときにトリガーされるように設定されており、なおかつ [ルールがトリガーされた場合、バックグランドではなく、直ちにこのルールを実行してください] オプションがオンになっている自動化ルールを探すことです。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 select r."ID" as "Rule Id", r."NAME" as "Rule name", t."TYPE" as "Rule trigger", case when lower(t."VALUE") like '%"synchronous":true%' then 'true' else 'false' end as "Synchronous", p.pkey as "Project Key", p.id as "Project Id", au.lower_user_name as "Rule author" from "AO_589059_RULE_CONFIG" r left join "AO_589059_RULE_CFG_COMPONENT" t on t."RULE_CONFIG_ID" = r."ID" and t."COMPONENT" = 'TRIGGER' left join "AO_589059_RULE_CFG_PROJ_ASSOC" rp on rp."RULE_CONFIG_ID" = r."ID" left join project p on concat(p.id, '') = rp."PROJECT_ID" left join app_user au on au.user_key = r."AUTHOR_KEY" where r."STATE" = 'ENABLED' and lower(t."VALUE") like '%"synchronous":true%' and ( t."TYPE" like ('jira.issue.event.trigger%') OR t."TYPE" = 'jira.issue.field.changed' ) order by r."NAME" asc, p.pkey asc;

  • 1 つ以上の結果を示す出力の例:

1 2 3 |Rule Id|Rule name |Rule trigger |Synchronous|Project Key|Project Id|Rule author| |-------|----------------------------------------|------------------------|-----------|-----------|----------|-----------| |1 |Rule executing script on priority update|jira.issue.field.changed|true | | |admin |
  • この方法は、一括操作の速度に影響を与えている自動化ルールを正確に特定するのに必ず役立つとは限りませんが (この SQL クエリは長いルール リストを返す可能性があります)、確認すべきルールを絞り込むための出発点としては最適です。

  • ここでできることは、各ルールの設定をチェックして、一括操作によってトリガーされるルールを探すことです。例:

    • 一括操作に 1 つの特定のフィールドの更新が含まれる場合は、その特定のフィールドが更新されたときにトリガーされるルールを探します。

    • 一括操作にチケットのトランジションが含まれる場合は、課題のトランジション時にトリガーされるルールを探します。

    • 一括操作に含まれるのが特定のプロジェクトのチケットの更新のみである場合は、すべてのプロジェクトまたはその特定のプロジェクトで実行されるように設定されたルールを探します。

    • その他...

原因

次に示すように、割り当てやトランジションなどによって課題が更新されたときにトリガーされるように設定され、なおかつ直ちに実行されるように設定されている ([ルールがトリガーされた場合、バックグランドではなく、直ちにこのルールを実行してください] オプションがオンにされている) 自動化ルールが少なくとも 1 つあります。

ScriptRunner タスクを実行するための自動化ルール

このような構成の場合、自動化ルールは、Automation For Jira によって制御される別のスレッドではなく、一括操作を実行している Jira スレッド内で実行されます。つまり、一括更新と自動化ルールの両方が同じスレッドで実行されるため、自動化ルールが複雑になるほど (特に ScriptRunner Groovy スクリプトが含まれている場合)、一括操作が完了するまでの時間が長くなります。

ソリューション

解決策は、一括操作を遅くしている各自動化ルールの設定画面を開き、そのトリガーの [ルールがトリガーされた場合、バックグランドではなく、直ちにこのルールを実行してください] オプションをオフにすることです。このようにすると、自動化ルールを引き続き実行しつつ、別のスレッド (automation-rule-executor:thread-X) で実行できるため、一括操作の実行速度が速くなります。

診断ステップで特定された各ルールに対して実行する手順:

  • ルールのトリガーに移動し、[ルールがトリガーされた場合、バックグランドではなく、直ちにこのルールを実行してください] オプションをオフにします。

  • 一括操作をもう一度実行して、操作が大幅に高速化されたかどうかを確認します。

  • まだ一括操作が遅い場合は、他のルールがパフォーマンスに影響を与えています。

    • その場合は、同じ手順を繰り返して、問題を引き起こしている可能性のある別のルールを特定します。

更新日時: 2024 年 7 月 11 日

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

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