Информационный портал по безопасности » Программирование » Веб-разработка » Как работать с Jira плагином из ScriptRunner или как избежать дублирования кода

 

Как работать с Jira плагином из ScriptRunner или как избежать дублирования кода

Автор: admin от 9-02-2018, 15:30, посмотрело: 599

В этой статье я хотел бы обсудить проблему дублирования кода в Adaptivist ScriptRunner.

Когда начинаешь писать скрипты в ScriptRunner, то обычно весь код пишешь в одном скрипте и затем добавляешь этот скрипт в пост функцию, валидатор, условие и тому подобное.



Все идет хорошо до тех пор, пока ты не обнаружил ошибку в коде, или не произошли изменения в бизнес-требованиях. В этом момент ты понимаешь, что поправить нужно не один скрипт, а несколько скриптов с изменившейся логикой, а еще хуже то, что ты не помнишь, какие точно скрипты нужно править.



Можно запустить поиск по директории, в которой лежат скрипты, но как показывает практика, такое решение проблемы практически всегда оставляет баги в коде.

Это классическая проблема, связанная с дублированием кода.

Попробуем избавиться от дублирования кода.

предыдущей статье я рассказал о том, как сделать плагин, к которому можно обращаться из других плагинов. Плагин назывался jira-library. Плагин предоставлял сервис LibraryService с функцией getLibraryMessage. Попробуем вызвать эту функцию.



Плагин jira-library можно взять здесь. Плагин нужно собрать командой atlas-mvn package и установить в Jira.



Далее мы должны написать скрипт на ScriptRunner, который будет обращаться к плагину jira-library. Для этого используются аннотации @WithPlugin и @PluginModule. @WithPlugin позволяет импортировать классы плагина jira-library, а @PluginModule позволяет внедрить(inject) LibraryService в скрипт. Подробно почитать про принцип работы этих аннотаций можно здесь.



Скрипт будет выглядеть вот так:



import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import ru.matveev.alexey.tutorial.library.api.LibraryService

@WithPlugin("ru.matveev.alexey.tutorial.library.jira-library")

@PluginModule
LibraryService libraryService

log.error(libraryService.getLibraryMessage()


Попробуем запустить его в консоли скриптов:



Как работать с Jira плагином из ScriptRunner или как избежать дублирования кода



На скриншоте видно, что сообщение из плагина jira-library отобразилось. Значит наше решение работает.



При данном способе реализации возникают следующие проблемы:




  • В версии выше 5.1. скрипт работает только как инлайн. Для того, чтобы скрипт заработал из файла необходимо написать скрипт вот так:



    import com.onresolve.scriptrunner.runner.customisers.PluginModule
    import com.onresolve.scriptrunner.runner.customisers.WithPlugin
    import ru.matveev.alexey.tutorial.library.api.LibraryService
    import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
    
    @WithPlugin("ru.matveev.alexey.tutorial.library.jira-library")
    
    LibraryService pl = ScriptRunnerImpl.getPluginComponent(LibraryService)
    log.error(pl.getLibraryMessage())




    Баг открыт в Adaptivist.



Преимущества этого подхода следующие:




  • Можно сделать общий код как для разрабатываемых плагинов, так и для скриптов в ScriptRunner

  • Можно реализовывать в собственном плагине то, что не поддерживает ScriptRunner, и затем использовать функциональность плагина в ScriptRunner. Например, таким образом можно реализовать ротацию функций(feature toggle). Можно создать модуль типа webwork, который позволит включать и выключать какую-то функциональность, и разместить его в разделе плагины. Далее можно экспортировать сервис, который будет информировать скрипт в ScriptRunner, включена ли требуемая функциональность. Если включена, то скрипт будет выполнять необходимые действия.



Источник: Хабрахабр

Категория: Программирование / Веб-разработка

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent