Gymterview
middle

Что такое Forge и как создать Forge-приложение?

Forge — serverless-платформа Atlassian для разработки Cloud-приложений, где код выполняется в управляемой Atlassian среде (FaaS), что обеспечивает безопасность и простоту развёртывания.

Аналогия из жизни: Forge — это как квартира-студия с мебелью от застройщика. Вы заезжаете и работаете (деплоите код), а управляющая компания (Atlassian) отвечает за отопление, электричество и уборку подъезда (инфраструктуру, безопасность, масштабирование).

Ключевые характеристики

  • Runtime: Node.js (TypeScript/JavaScript)
  • Хостинг: Atlassian (не нужен свой сервер)
  • Изоляция: каждое приложение работает в sandbox
  • Ограничения: 25 секунд timeout, 512MB RAM на invocation

Создание приложения

Пример
npm install -g @forge/cli
forge login
forge create
# Выбрать: Jira → jira-issue-panel (или другой шаблон)

manifest.yml

Полный пример manifest.yml
modules:
  jira:issuePanel:
    - key: my-issue-panel
      title: Дополнительная информация
      resource: main
      resolver:
        function: resolver

  jira:workflowPostFunction:
    - key: my-post-function
      name: Автоназначение
      function: workflowFunction

  function:
    - key: resolver
      handler: index.handler
    - key: workflowFunction
      handler: workflow.handler

  trigger:
    - key: issue-created-trigger
      function: onIssueCreated
      events:
        - avi:jira:created:issue

resources:
  - key: main
    path: src/frontend/index.jsx

permissions:
  scopes:
    - read:jira-work
    - write:jira-work
    - read:jira-user

app:
  runtime:
    name: nodejs18.x
  id: ari:cloud:ecosystem::app/xxxxxxxx

Backend (Resolver)

Пример
import Resolver from '@forge/resolver';
import api, { route } from '@forge/api';
import { storage } from '@forge/api';

const resolver = new Resolver();

resolver.define('getIssueDetails', async ({ payload, context }) => {
    const issueKey = context.extension.issue.key;
    const response = await api.asUser().requestJira(
        route`/rest/api/3/issue/${issueKey}`,
        { headers: { 'Accept': 'application/json' } }
    );
    const data = await response.json();
    return {
        summary: data.fields.summary,
        status: data.fields.status.name,
        assignee: data.fields.assignee?.displayName || 'Не назначен'
    };
});

export const handler = resolver.getDefinitions();

Деплой и установка

Пример
forge deploy          # Деплой кода в Atlassian Cloud
forge install         # Установка на конкретный Jira Cloud site
forge tunnel          # Режим разработки (проксирование на локальный код)
forge logs            # Просмотр логов приложения

Частые ошибки

  • Превышение лимита 25 секунд на invocation — тяжёлую логику нужно разбивать на части
  • Не указать необходимые scopes в manifest.yml — API-вызовы возвращают 403
  • Использование console.log для отладки в production — логи ограничены 4 KB
  • Не обработать ошибки в resolver — пользователь видит generic error message

Как используется в 2026

  • Forge стал зрелой платформой: Custom UI, Storage API, Entity Storage, Async Events, Scheduled Triggers
  • Node.js 18+ — текущий runtime
  • UI Kit 2 — актуальная версия с улучшенным набором компонентов
  • Forge поддерживает multi-product apps (Jira + Confluence + Bitbucket)

На собеседовании: подчеркните, что Forge — рекомендуемый Atlassian фреймворк для новых Cloud-приложений. Два варианта UI: UI Kit (декларативный, проще) и Custom UI (React, полная свобода). api.asUser() — от имени пользователя, api.asApp() — от имени приложения. forge tunnel — незаменим при разработке.