Интеграция Трекера с Cloud Functions

В данном руководстве описана интеграция средств автоматизации Трекера с сервисом Cloud Functions на примере суммирования затраченного времени родительской задачи по всем дочерним подзадачам.

Чтобы настроить автоматическое обновление суммарного значения затраченного времени родительской задачи при изменении этой величины в любой из дочерних подзадач:

  1. Зарегистрируйте приложение
  2. Зарегистрируйте OAuth-приложение и получите токен
  3. Получите ID организации для доступа к API
  4. Создайте функцию Cloud Functions
  5. Настройте триггер
  6. Протестируйте автоматическое обновление данных

Перед началом работы

Для прохождения сценария вам понадобятся учетные записи:

  • в Yandex Cloud с платежным аккаунтом;
  • В Трекере в организации, подключенной к сервису Yandex Cloud, и ролью не ниже organization-manager.admin.

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Биллинг убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

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

Подробнее об облаках и каталогах.

В стоимость поддержки инфраструктуры входит плата за использование функции (см. тарифы Cloud Functions);

Если созданные ресурсы вам больше не нужны, удалите их.

Зарегистрируйте OAuth-приложение и получите токен

Если вы используете федеративный или сервисный аккаунт, авторизуйтесь с помощью IAM-токена.

Чтобы получить токен:

  1. Перейдите по ссылке https://oauth.yandex.ru.

  2. На странице Ваши приложения нажмите  Создать.

  3. В открывшемся окне выберите вариант Для доступа к API или отладки и нажмите Перейти к созданию.

  4. Укажите название приложения и почту для связи.

  5. Добавьте разрешения для доступа к данным пользователя. Чтобы выбрать разрешение, начните вводить его название в поле Название доступа:

    • Запись в трекер (tracker:write) — все операции с данными: создание, удаление, редактирование.
    • Чтение из трекера (tracker:read) — только чтение данных.
  6. Нажмите Создать приложение.

  7. В личном кабинете Яндекс OAuth выберите созданное ранее приложение и скопируйте его идентификатор из поля ClientID.

  8. Войдите в аккаунт, от имени которого вы будете работать с API.

  9. Сформируйте ссылку для запроса токена и перейдите по ней:

    https://oauth.yandex.ru/authorize?response_type=token&client_id=ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ
    

    На странице появится последовательность символов — это OAuth-токен. Скопируйте его и сохраните.

Чтобы проверить наличие доступа к API, выполните запрос информации о текущем пользователе. Если доступ не был получен, запрос вернет ответ с кодом 401 Unauthorized.

Пример запроса информации о текущем пользователе с помощью curl:

curl -X GET 'https://api.tracker.yandex.net/v3/myself' \
     -H 'Authorization: OAuth y0__xAbc******' \
     -H 'X-Org-ID: 1234******'
curl -X GET "https://api.tracker.yandex.net/v3/myself" ^
     -H "Authorization: OAuth y0__xAbc******" ^
     -H "X-Org-ID: 1234******"

Получите ID организации для доступа к API

  1. Перейдите в Трекер. Нажмите кнопку Войти в Трекер.
  2. Чтобы узнать идентификатор организации, перейдите на страницу Администрирование → Организации и скопируйте значение поля идентификатор.
  3. Скопируйте и сохраните идентификатор организации — он понадобится при создании функции.

Создайте функцию Cloud Functions

  1. Перейдите в консоль управления.
  2. В левом верхнем углу нажмите кнопку  Все сервисы.
  3. Выберите Бессерверные вычисления → Cloud Functions.
  4. Нажмите кнопку Создать функцию.
  5. Укажите название функции, например timeupdater.
  6. Нажмите кнопку Создать.
  7. В открывшемся окне Редактор выберите среду выполнения Python / 3.9.
  8. Нажмите кнопку Продолжить.
  9. В поле Способ нажмите кнопку ZIP-архив.
  10. Прикрепите тестовый архив.
  11. В поле Точка входа укажите index.handler.
  12. В разделе Параметры в поле Переменные окружения добавьте:
    • ORG — идентификатор организации Яндекс 360 для бизнеса.
    • TOKEN — токен доступа к приложению.
  13. Нажмите кнопку Сохранить изменения.
  14. Дождитесь загрузки страницы и в поле Ссылка для вызова скопируйте и сохраните ссылку для вызова функции.
    Пример ссылки:
    https://functions.yandexcloud.net/d4e94uav3108********
    
  15. Активируйте опцию Публичная функция.

Настройте триггер

Создайте очередь

  1. На панели слева нажмите  Очереди → Создать очередь.
  2. Выберите шаблон очереди, например Базовая разработка.
  3. Задайте имя, например Function Test.
  4. Нажмите кнопку Создать.

Создайте триггер

  1. На странице очереди в правом верхнем углу нажмите  Настройки очереди.
  2. На панели слева выберите Автоматизация → Триггеры и нажмите кнопку Создать триггер.
  3. В поле Название введите название триггера, например timeupdater.
  4. В разделе Условия срабатывания выберите Учёт Времени → Затрачено времени.
  5. В разделе Действия триггера выберите HTTP-запрос.
  6. В открывшейся форме в поле Адрес введите:
    https://functions.yandexcloud.net/<идентификатор_функции>?id={{issue.key}}
    
    Где https://functions.yandexcloud.net/<идентификатор_функции> — ссылка для вызова функции, которую вы сохранили при создании функции.
    Пример:
    https://functions.yandexcloud.net/d4e94uav3108********?id={{issue.key}}
    
  7. Нажмите кнопку Создать.

Протестируйте автоматическое обновление данных

Создайте задачи

  1. Создайте родительскую задачу, для которой будет суммироваться затраченное время подзадач:
    1. На странице очереди Function Test нажмите кнопку Создать задачу.
    2. В открывшейся форме в поле Название задачи введите название задачи, например Parent Task.
    3. Нажмите кнопку Создать.
  2. Создайте подзадачи:
    1. На странице задачи Parent Task в правом верхнем углу в меню Действия выберите Добавить подзадачу.
    2. В открывшейся форме в поле Название задачи введите название подзадачи, например Subtask-1.
    3. Аналогичным образом создайте еще одну или несколько подзадач с названиями Subtask-2, Subtask-3.

Внесите данные о затраченном времени в подзадачах

  1. На странице подзадачи Subtask-1 в правом верхнем углу в меню Действия выберите Указать затраченное время.
  2. В открывшемся окне в поле Затрачено времени укажите любое время, например 1h25m.
  3. Аналогичным образом добавьте затраченное время в других подзадачах.

Убедитесь в корректной работе функции

  1. Перейдите на страницу задачи Parent Task.
  2. Убедитесь, что в блоке параметров задачи в разделе Учёт Времени в поле Затрачено времени учтено указанное в подзадаче время.

Как удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы, удалите функцию Cloud Functions.