junior
Что такое ScriptRunner и когда его использовать?
ScriptRunner — один из самых популярных плагинов для Jira Data Center, позволяющий расширять Jira без написания полноценного Java-плагина через Groovy-скрипты с полным доступом к внутреннему API Jira.
Аналогия из жизни: ScriptRunner — это как швейцарский нож для Jira-администратора. Вместо того чтобы заказывать специальный инструмент (писать Java-плагин), вы достаёте ножик и решаете задачу прямо на месте за минуты.
Возможности ScriptRunner для DC
| Функция | Описание |
|---|---|
| Script Listeners | Реакция на события Jira |
| Script Fields | Вычисляемые кастомные поля |
| Behaviours | Динамическое управление формами |
| Script Post-Functions | Workflow post-functions на Groovy |
| Script Conditions | Workflow conditions |
| Script Validators | Workflow validators |
| Script Console | Выполнение Groovy-скриптов ad-hoc |
| REST Endpoints | Создание REST API на Groovy |
| Escalation Services | Периодические задания |
Пример: Script Listener
Пример
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.issue.MutableIssue
def event = event as IssueEvent
def issue = event.issue as MutableIssue
if (issue.issueType.name == 'Bug' && issue.priority.name == 'Critical') {
def currentLabels = issue.labels
currentLabels.add('critical-auto')
issue.setLabels(currentLabels)
issueManager.updateIssue(event.user, issue,
com.atlassian.jira.event.type.EventDispatchOption.DO_NOT_DISPATCH, false)
}
Пример: Script Field (вычисляемое поле)
Пример
import java.time.LocalDate
import java.time.temporal.ChronoUnit
def created = issue.created.toInstant()
.atZone(java.time.ZoneId.systemDefault()).toLocalDate()
return ChronoUnit.DAYS.between(created, LocalDate.now())
Когда ScriptRunner достаточно vs когда нужен плагин
| Критерий | ScriptRunner | Кастомный плагин |
|---|---|---|
| Сложность логики | Простая-средняя | Высокая |
| UI | Минимальный | Полноценный |
| Модель данных | Поля Jira / PluginSettings | Active Objects (собственные таблицы) |
| Тестирование | Ручное / Script Console | JUnit, интеграционные тесты |
| CI/CD | Ограниченно | Полноценный |
| Время разработки | Минуты-часы | Дни-недели |
Частые ошибки
- Groovy-скрипты без error handling — ошибка в listener может сломать операции пользователей
- Тяжёлая логика в Script Field — поле вычисляется при каждом отображении задачи
- Использование ComponentAccessor без проверки результата на null
- Скрипты, зависящие от имён полей/статусов — ломаются при переименовании (используйте ID)
Как используется в 2026
- ScriptRunner DC — по-прежнему самый популярный способ быстрой кастомизации
- ScriptRunner Cloud значительно уступает DC-версии (JavaScript, нет Script Console, нет Behaviours)
- Тренд: ScriptRunner для быстрого прототипирования, миграция на плагин при росте сложности
- Для Cloud рекомендуют Jira Automation для простых сценариев вместо ScriptRunner Cloud
На собеседовании: подчеркните, что ScriptRunner покрывает 70-80% задач кастомизации без написания Java-плагина. Это инструмент номер один на Atlassian Marketplace. Для Cloud-версии возможности значительно ограничены. Ключевое правило: если задача решается ScriptRunner-скриптом за 20 минут — не пишите плагин.