Портал документации TeamStorm
Table of Contents
Что такое TeamStorm? ↵
Что такое TeamStorm?
TeamStorm — это современная система управления совместной работой, которая помогает компаниям любого размера и любой индустрии достигать стратегических целей, управлять рабочими процессами и выстраивать эффективное взаимодействие всех команд, от разработки до отдела продаж.
Документы TeamStorm
Информация о TeamStorm:
Руководства:
- Руководство системного администратора TeamStorm
- Руководство администратора TeamStorm по добавлению лицензий и пользователей
- Руководство пользователя
- Руководство по импорту данных из других систем
Release Notes:
API:
Ended: Что такое TeamStorm?
Информация о TeamStorm ↵
Описание процессов, обеспечивающих поддержание жизненного цикла ПО TeamStorm
Назначение и статус документа
Настоящий документ призван обеспечить уровень сопровождения и регламентирует взаимодействие Заказчика и ООО «ТимШторм» (далее Исполнителя) в процессе эксплуатации системы управления совместной работой TeamStorm , определяет участников этого процесса, их функции и ответственность.
Действие настоящего регламента распространяется на:
- специалистов Заказчика, использующих систему для выполнения своих должностных обязанностей;
- специалистов Заказчика, ответственных за эксплуатацию системы управления совместной работой TeamStorm ;
- специалистов Исполнителя, ответственных за техническую поддержку, администрирование и сопровождение системы управления совместной работой TeamStorm .
Описание процессов жизненного цикла системы управления совместной работой TeamStorm
Поддержание жизненного цикла системы управления совместной работой TeamStorm осуществляется за счет сопровождения системы. Сопровождение системы также включает проведение модернизаций программного кода системы по заявкам заказчика с целью исправления ошибок в системе в случае, если это установлено договором (пакетами услуг «Стандартный» и «Расширенный» предусмотрено плановое обновление системы, куда входит исправление ошибок), восстановление данных и консультации по вопросам эксплуатации, установки и переустановки системы.
Сопровождение системы необходимо для обеспечения:
- отсутствия простоев в работе предприятия Заказчика по причине невозможности функционирования системы (аварийная ситуация, ошибки в работе системы);
- обеспечения гарантий корректного функционирования системы и дальнейшего развития её функциональности.
Обозначенные цели должны быть достигнуты путем:
- консультирования пользователей и администраторов системы по вопросам эксплуатации (по телефону, факсу, электронной почте и другим каналам связи) или письменно по запросу Заказчика;
- обеспечение Заказчика новыми версиями системы по мере их выхода (в рамках пакетов услуг «Стандартный» и «Расширенный», согласно Таблице 1);
- обеспечение Заказчика актуальными версиями эксплуатационной документации;
- устранение ошибок в случае их выявления при работе с системой.
Перечень услуг по сопровождению
Компания ООО «ТимШторм» предоставляет следующие пакетные варианты сопровождения системы управления совместной работой TeamStorm , приведенные в Таблице 1.
Варианты сопровождения системы TeamStorm
Стандартный пакет
- Консультирование посредством e-mail, телефона и online-мессенджера сотрудника Заказчика в рабочее время в рабочие дни с 10 до 18 часов UTC +3:00 по вопросам функционирования системы. Ответ в течение 8 рабочих часов с момента получения запроса со стороны Заказчика.
- Помощь в настройке и администрировании системы.
- Обработка кейсов и инцидентов, случившихся в результате действий пользователя, консультирование по их устранению при условии предоставления удаленного доступа Исполнителю.
- Предоставление обновлений системы управления совместной работой TeamStorm (обновления — это релизы системы с устраненными дефектами системы, а также выпуск новых функциональных возможностей и новых модулей). Расчётный период выхода обновлений – ежеквартально в течение года.
Расширенный пакет
- Выделенный персональный консультант службы поддержки в рабочее время в рабочие дни с 10 до 18 часов UTC +3:00.
- Консультирование посредством e-mail, телефона и online-мессенджера сотрудника Заказчика в рабочее время в рабочие дни с 10 до 18 часов UTC +3:00 по вопросам функционирования системы. Ответ в течение 8 рабочих часов с момента получения запроса со стороны Заказчика.
- Обработка кейсов и инцидентов, случившихся в результате действий пользователя, консультирование по их устранению, при условии предоставления удаленного доступа Исполнителю.Предоставление обновлений системы TeamStorm (обновления — это релизы системы с устраненными дефектами системы, а также выпуск новых функциональных возможностей и новых модулей). Расчётный период выхода обновлений – ежеквартально в течение года.
- Приоритетное рассмотрение заявок Заказчика специалистами Исполнителя, прием задачи в работу в течение 8 рабочих часов с момента регистрации заявки.
- Один выезд специалиста к Заказчику в месяц в пределах г. Москвы продолжительностью не более 8 часов или проведение одной онлайн-встречи в месяц посредством видеоконференцсвязи не более 8 часов с целью выяснения и устранения проблем или консультаций по вопросам функционирования системы.
Системное обучение
- Проведение обучения сотрудников Заказчика силами Исполнителя для повышения квалификации и ознакомление с системой управления совместной работой TeamStorm. По желанию Заказчика обучение может быть предоставлено очно с выездом специалиста компании ООО «ТимШторм», либо в виде онлайн видеоконференций.
- Предоставление сотрудникам Заказчика:
- учебных материалов в электронном или печатном виде;
- сертификатов о прохождении обучения системы управления совместной работой TeamStorm.
Организация сопровождения со стороны Заказчика
Ответственное за сопровождение системы лицо со стороны Заказчика имеет полномочия и решает следующие вопросы:
- контроль регистрации всех запросов сотрудников Заказчика по вопросам сопровождения системы;
- взаимодействие со специалистами Исполнителя по вопросам сопровождения системы;
- согласование отчетов и визирование Актов сдачи-приемки оказанных услуг.
Организация сопровождения со стороны Исполнителя
Консультант службы технической поддержки проводит первичную классификацию запросов и, при необходимости, их эскалацию.
Непосредственное консультирование Пользователей и исполнение запросов Заказчика осуществляют специалисты Исполнителя.
Информация о назначении ответственного консультанта службы технической поддержки, контактных данных и последующих изменениях сообщается Заказчику в письменном виде посредством электронной почты.
Обеспечение процесса сопровождения
Для обеспечения надлежащего качества процесса сопровождения системы специалисты Исполнителя должны обладать необходимой полнотой информации о ситуации, приведшей к проблеме. В случае если специалисты Заказчика не могут предоставить необходимую информацию, специалисты Исполнителя могут запросить у Заказчика предоставление полномочий на просмотр, изменение и удаление данных в системе. Эти полномочия равны полномочиям специалистов Заказчика, ответственных за администрирование системы. Исполнитель гарантирует конфиденциальность информации Заказчика, полученной в процессе сопровождения на усмотрение Заказчика.
Для надлежащего уровня обеспечения процесса сопровождения системы Исполнитель привлекает к работе компетентных специалистов и обеспечивает необходимый уровень коммуникации специалистов с ответственным за сопровождение системы лицом со стороны Заказчика
Совершенствование системы
Система регулярно развивается и дорабатывается: в ней появляются новые дополнительные возможности, оптимизируется производительность, обновляется интерфейс.
Пользователь может повлиять на совершенствование продукта. Для этого необходимо направить обращение по усовершенствованию на электронную почту технической поддержки по адресу support@teamstorm.io или через портал поддержки https://support.teamstorm.io
Обращение будет рассмотрено и, в случае признания его целесообразности, реализация будет запланирована, и в систему могут быть внесены соответствующие изменения.
Техническая поддержка
Техническая поддержка включает в себя регулярные Услуги по администрированию, сопровождению и поддержке актуального состояния (уровня) систем (в пределах ответственности), базы данных и сервисных программ.
Порядок предоставления услуг
Регистрация и назначение запросов
При возникновении проблемы по работе с системой или при необходимости получения информации Пользователь в первую очередь обращается к ответственному за эксплуатацию системы лицу Заказчика. По возможности ответственное лицо самостоятельно отвечает на вопросы Пользователя и устраняет возникшую проблему или предоставляет необходимую информацию без обращения к Исполнителю.
Вопросы Пользователей, ответы на которые содержатся в руководствах пользователя и методических инструкциях, должны рассматриваться ответственным за сопровождение системы лицом со стороны Заказчика самостоятельно.
Консультации пользователям могут быть оказаны Исполнителем устно по телефону или письменно по электронной почте или online-мессенджеру.
В случае невозможности самостоятельно разрешить проблему, ответственное лицо Заказчика обращается к специалисту технической поддержки Исполнителя и оформляет письменную заявку на предоставление Услуги (именуемую далее «Запрос»), связанную с обслуживанием систем, доработкой программного обеспечения, с устранением ошибок или решением других проблем, мешающих нормальному функционированию системы. В случае необходимости Исполнитель имеет право запросить дополнительную информацию по запросу, изменить его сложность и, соответственно, срок ответа. В случае потери актуальности или нечетко сформулированного Запроса Исполнитель может отклонить Запрос. Специалист технической поддержки Исполнителя регистрирует Запрос и передает его на исполнение специалисту Исполнителя.
У ответственного лица Заказчика есть возможность запрашивать данные о:
- статусе Запроса;
- приоритете и плановом сроке выполнения Запроса.
Запросы Заказчика обрабатываются по мере их поступления. В случае если в момент поступления Запроса Консультант работает с другим Запросом, то Запрос ставится «в очередь». Порядок обработки Запросов определяется их приоритетом.
В случае очень сложных Запросов, требующих глубокой проработки и больших трудозатрат специалистов, Исполнитель имеет право потребовать разбиения Запроса на несколько этапов и изменения сроков рассмотрения Запроса.
Для «Расширенного» пакета услуг подразумевается наивысший приоритет выполнения Запросов.
Время предоставления услуг
Услуги предоставляются Заказчику с 10:00 до 18:00 часов UTC +3:00 в рабочие дни, которые устанавливаются Трудовым Кодексом Российской Федерации и соответствующими Постановлениями Правительства РФ на текущий календарный год.
Исполнитель предоставляет Услуги на основе утвержденного Регламента, Соглашения об уровне сервиса и графиков работ по модернизации функциональных блоков, согласованных с Заказчиком. Если работы, проводимые Исполнителем по запросу Заказчика, приводят или могут привести к ухудшению качества предоставления Услуг или к остановке предоставления Услуг, Исполнитель обязан приостановить работы и немедленно уведомить Заказчика о возникшей проблеме.
Все изменения, вносимые Исполнителем в системы, которые могут повлиять на функциональность и работоспособность системы, в обязательном порядке согласовываются с ответственным специалистом Заказчика.
Оказание услуг по доработке системы
В случае заинтересованности Заказчика в расширении функциональности системы TeamStorm , представитель Заказчика направляет свои пожелания в адрес разработчика системы. Далее все пожелания индивидуально согласовываются между Исполнителем и Заказчиком.
Персонал, необходимый для обеспечения поддержки
Создание и развитие системы управления совместной работой TeamStorm выполнялись и осуществляются в настоящий момент силами специалистов ООО «ТимШторм».
Для обеспечения надлежащей поддержки системы в команде Исполнителя присутствуют следующие специалисты:
- разработчики с опытом работы с Microsoft .NET Framework и Microsoft ASP.NET, со знанием языка программирования C# и опытом работы с СУБД MS SQL и PostgreSQL;
- системные администраторы с опытом работы, со знанием средств восстановления баз данных и мониторинга производительности серверов;
- консультанты технической поддержки с опытом работы в системе.
Коллектив разработчиков обладает необходимым набором знаний для работы со всеми компонентами, входящими в состав системы TeamStorm , и для решения прикладных задач. Разработана и поддерживается в актуальном состоянии вся необходимая документация по сопровождению и развитию системы и работе пользователей с системой.
Для работы с системой пользователь должен:
- обладать навыками работы с персональным компьютером на уровне пользователя;
- иметь опыт использования web-браузеров;
- знать свои должностные обязанности;
- изучить руководство пользователя системы.
Для работы с системой администраторы Заказчика должны:
- обладать знанием основ разработки ПО;
- обладать опытом работы с Linux, Bash, Docker;
- изучить руководство администратора системы.
Описание функциональных и технических характеристик ПО TeamStorm
Назначение документа
Документ описывает функциональные характеристики системы управления проектами и совместной работой TeamStorm.
Описание системы
TeamStorm предоставляет возможность организовать совместную работу над проектами в едином цифровом пространстве, помогает обеспечить эффективное взаимодействие всех участников проекта, сфокусировать участников проекта на ключевые результаты и увеличить скорость принятия управленческих решений.
Структура TeamStorm состоит из следующих элементов:
- пространства;
- папки;
- расширения;
- задачи.
TeamStorm обеспечивает выполнение следующих функций:
- создание пространств для управления проектами и просмотр их структуры;
- декомпозиция пространств на папки;
- создание и редактирование задач;
- отслеживание выполнения задач, изменение статуса задач и исполнителя, связывание задач;
- выдача пользователям доступа на созданные пространства;
- фильтрация и поиск задач;
- переключение между представлениями для работы с задачами;
- настройка рабочих процессов с возможностью создавать пользовательские статусы;
- отслеживание списка задач пользователя на рабочем столе.
Функциональные характеристики
Главная страница
На главной странице пользователя отображается:
- список доступных ему пространств;
- список назначенных на него задач.
Элементы управления
В системе доступны следующие элементы управления:
- поле поиска задач по идентификатору и наименованию с выпадающим списком задач;
- переключатели представления типа "Доска" и "Таблица";
- фильтры по наименованию задачи, исполнителю и статусу задачи;
- кнопка и окно создания задачи;
- панель изменения задачи.
Работа с пространствами
В системе доступно создание/удаление пространств и просмотра их структуры. Пространство объединяет проекты и работы, которые влияют на общие целевые показатели организации. Пространство на системном уровне определяет модель доступа и базовые конфигурации содержимого. Принципы выделения пространства принимаются на уровне организации.
В пространстве для каждого типа задачи определен процесс по умолчанию.
На уровне пространства определяются рабочие процессы. В пространстве для каждого типа задачи определен процесс по умолчанию.
Владелец пространства (пользователь, создавший пространство) может предоставлять доступ к данному пространству другим пользователям.
Работа с папками
В системе доступно создание/удаление папок внутри пространства. Папка объединяет задачи со схожими процессами и доступами (например, группировка работы по проектам, продуктам, командам).
Конфигурация рабочих процессов и типов для папки соответствует конфигурации пространства.
Пользователь может создавать вложенные папки.
Работа с задачами
В системе доступно создание задач разных типов — структурированных элементов для управления проектом.
Пользователь может:
- вносить информацию о необходимых действиях для выполнения задачи;
- устанавливать исполнителя задачи;
- изменять статус по мере выполнения задачи и закрывать её;
- добавлять вложения (файлы);
- выстраивать иерархию задач, добавляя вложенные задачи;
- оставлять комментарии к задаче;
- создавать к задачам пользовательские атрибуты типов «строка», «тег», «список», «дата», «число»;
- связывать задачи, выстраивая между ними отношения типа «зависимость», «блокирование», «дублирование»;
- указывать рабочий процесс, по которому должна проходить задача.
Представления типа "Доска" и "Таблица"
Вся информация о выполнении задач отслеживается с помощью основных представлений — "Доска" и "Таблица". Таблица представляет собой список задач с ее параметрами. Доска представляет из себя набор карточек задач, сгруппированных по статусам в колонках доски.
Через представления пользователь может:
- создавать задачи;
- переходить к карточке задачи;
- изменять статус задачи;
- редактировать атрибуты задачи;
- копировать ссылку на задачу;
- назначать исполнителя.
Пользователь может переключаться между представлениями в виде таблицы и доски. Представления отображают задачи выбранной папки или списка задач. В представлениях доступна фильтрация отображаемых задач по названию, статусу и исполнителю.
Настройка рабочих процессов
В системе доступно создание настраиваемых рабочих процессов. Рабочий процесс определяет статусную модель отдельной задачи, которая служит для формализации и отражения этапов выполнения задачи.
В пространстве для каждого типа задачи определен процесс по умолчанию. Все процессы определены на уровне пространства и наследуются папками и задачами.
При конфигурировании рабочего процесса пользователь может:
- создавать новые статусы или добавлять существующие;
- удалять статусы из процесса.
Технические характеристики
Решения по комплексу технических средств, его размещению на объекте
Техническое обеспечение системы TeamStorm включает следующие технические средства:
- серверы;
- рабочие станции (для пользователей).
Требования к серверному оборудованию системы представлены в Таблице 1.
Допускается установка на программную и/или аппаратную систему, эмулирующую аппаратное обеспечение некоторой платформы (виртуальная машина).
Таблица 1 - Требования к серверным ресурсам
Ресурс | Рекомендации |
---|---|
Операционная система | CentOS или любая другая с возможностью установки Docker, Docker compose |
Процессор | x86-64 / 8 ядер серверного класса с поддержкой виртуализации и тактовой частотой 2.2 ГГц и выше |
Оперативная память | 12 Гб |
Объем жесткого диска | 100 Гб |
Сетевой интерфейс | TCP/IP |
Требования к оборудованию рабочих станций пользователей приведены в Таблице 2
Таблица 2 - Требования к оборудованию рабочих станций пользователей
Компонент | Рекомендуемая конфигурация |
---|---|
Процессор | Intel Core 2 Duo 2.3 Ггц или аналог |
Оперативная память | 2 Гб SDRAM |
Жесткий диск | 50 Гб |
Сетевая плата | Ethernet 10 Мбит |
Дополнительное оборудование | Монитор, клавиатура, мышь |
Операционная система | Windows, MacOS или |
Общесистемное ПО | Веб-браузер Google Chrome, Яндекс.Браузер, Opera, Mozilla Firefox, Microsoft Edge или Safari |
Cостав программных средств
Система TeamStorm представляет собой клиент-серверное приложение. Для развертывания и запуска системы используются средства docker-контейнеризации.
Система TeamStorm разработана с помощью следующих программных средств и языков программирования:
- C# – для реализации серверной части;
- TypeScript – для реализации клиентской части и пользовательского интерфейса;
- PostgreSQL – в качестве базы данных;
- Minio – в качестве файлового хранилища;
- RabbitMQ – для организации обмена данными между сервисами системы;
- Elasticsearch – в качестве подсистемы логирования;
- Nginx – для маршрутизации запросов.
Перечень программного обеспечения
- ОС Linux Рекомендуемая ОС Linux, или любая c возможностью установки Docker, Docker compose
- Docker Engine 17.09.0 и выше;
- Docker Compose 1.29.2 и выше.
Перечень необходимых лицензий представлен в Таблице 3.
Таблица 3 - Перечень необходимых лицензий
Тип лицензии TeamStorm | Описание |
---|---|
Временная | Лицензия по количеству пользователей системы на время пилотирования |
Коммерческая | Лицензия по количеству пользователей на время использования |
Термины и определения
Agile-расширение
Расширение с настройками очередей типа "бэклог" и "спринт"
Бэклог
Очередь, которая содержит нерешенные задачи, над которыми работает команда
Спринт
Отрезок времени, в течение которого команда решает определенную задачу или группу задач
Расширение
Модуль, расширяющий функциональность пространства
Пространство
Пространство, которое объединяет типы работ по сходим критерием. Определяет модель доступа и базовые конфигурации содержимого. Принципы выделения пространств принимаются > на уровне организации
Задача
Объект, который можно отслеживать, планировать, описывать, обсуждать или согласовывать
Папка
Раздел в пространстве, который объединяет похожие типы задачи со схожими доступами и процессами (проект/продукт/команда)
Атрибут задачи
Атрибут определенного типа, значение которого может хранить задача. Описывает или категорирует задачу
Пользовательский атрибут
Атрибут, добавляемый пользователем, специфичный для типа задачи и/или папки или пространства
Категория статуса
Определяет возможные категории статусов для группировки статусов. На уровне системы определены категории To Do, In Progress, Done, Cancelled
Рабочий процесс, процесс
Определяет набор статусов для задачи и правила перехода между ними
Процесс по умолчанию
Процесс, присваеваемый задаче при ее создании
Тип задачи
Определяет шаблон создания задачи, с каким процессом или атрибутом она создается
Комментарий
Комментарий к задаче
Вложение
Вложение в виде файла, добавляемое к задаче или комментарию
Ended: Информация о TeamStorm
Руководства ↵
Руководство системного администратора по установке, обновлению и резервному копированию ↵
Инструкция по установке, обновлению и резервному копированию TeamStorm
Назначение документа
Документ описывает действия системного администратора по установке, обновлению, резервному копированию, восстановлению и настройке программного обеспечения TeamStorm.
Версия 2.61.0 и выше ↵
Версия 2.61.0
Назначение документа
Руководство описывает действия системного администратора по установке, резервному копированию, восстановлению и обновлению TeamStorm версии 2.61.0 и выше.
Руководство содержит разделы:
- Общие рекомендации
- Системные требования
- Полезные команды
- Установка и обновление в Docker
- Установка в Kubernetes
- Настройка почтового сервера для уведомлений
- Настройки скриптовой автоматизации
- Настройка допустимого времени редактирования комментариев
- Изменение ссылки на видеоролик
- Проверка корректности установки
- Перезапуск и удаление
- Резервное копирование и восстановление
Общие рекомендации
Не работайте из-под пользователя root
. Для работы приложения достаточно создать пользователя и добавить его в группу docker
:
Создайте отдельную директорию, в которой вы будете хранить артефакты установки.
Артефакты предыдущих установок сохраняйте в заранее отведенном месте.
Используйте мониторинг, чтобы отслеживать нагрузку на сервер.
Системные требования
Требования к серверному оборудованию системы на момент её развёртывания
Ресурс | Конфигурация (минимально / рекомендуется) | Комментарий |
---|---|---|
Процессор | 4 / 8 ядер серверного класса с поддержкой виртуализации | Зависит от нагрузки на кластер |
ОЗУ | 8 / 16 ГБ | Зависит от нагрузки на кластер |
Дисковое пространство | 100 ГБ | *Зависит от объёма хранимой информации |
* – Возможен перенос данных в хранилище S3.
Требования к системному программному обеспечению
Программное обеспечение TeamStorm использует технологию изоляции окружения
Docker
для обеспечения надежной и отказоустойчивой системы и может быть
установлено на любой операционной системе семейства Linux,
поддерживающей эту технологию.
Мы всегда рекомендуем пользоваться последней стабильной версией вашей операционной системы.
Установка Docker Compose
Используйте официальную документацию к дистрибутиву вашей операционной системы
для установки пакетов docker
и docker compose
.
Требования к версиям
Приложение | Версия | Документация |
---|---|---|
Docker Engine | 20 + | Docker Engine |
Docker Compose | 2 + | Docker Compose |
Test IT | 4.4 + | Test IT |
ВНИМАНИЕ
Возможна работа кластера TeamStorm с более старыми версиями пакетов docker
и docker-compose
,
но в таком случае ответственность за стабильную работу лежит на лице, осуществляющем установку.
Полезные команды
Команды, которые могут помочь администратору установить программное обеспечение TeamStorn при помощи Docker.
Команда | Назначение |
---|---|
docker version |
Версия docker |
docker compose version |
Версия docker compose |
docker compose ls |
Посмотреть список запущенных проектов docker compose |
docker compose -p ${PROJECT_NAME} up -d --remove-orphans |
Запустить проект с удалением более неиспользуемых контейнеров |
docker compose -p ${PROJECT_NAME} restart |
Перезапустить проект |
docker compose -p ${PROJECT_NAME} logs ${SERVICE} |
Посмотреть логи сервисе в заданном проекте |
docker compose -p ${PROJECT_NAME} down --volumes |
Остановить проект и очистить разделы контейнеров |
docker compose -p ${PROJECT_NAME} exec -ti -u 0 ${SERVICE} sh |
Запустить в контейнере оболочку sh с правами root пользователя |
Установка и обновление в Docker ↵
Установка и обновление в Docker
Раздел описывает операции по установке и обновлению TeamStorm и содержит подразделы:
Состав поставки
Архив автономной установки содержит папки:
teamstorm
, которая содержит:images.tar
- архив с образами;.env
- конфигурационный файл, содержащий переменные, используемые для обращения к контейнерам TeamStorm;docker-compose.yml
- конфигурационный файл Docker Compose;setup.sh
- скрипт для упрощенного развертывания TeamStorm и Test IT;setup_teamstorm.sh
- скрипт для автоматического развертывания TeamStorm;
testit
с соответствующим набором компонентов, необходимых для установки ПО Test IT.
Подготовка к установке
Для обновления TeamStorm до версии 2.61.0 необходимо предварительно обновить TeamStorm до версии 2.33.
Перед обновлением рекомендуется создать резервную копию TeamStorm и Test IT и
проверить соответствие наименований проектов в docker-compose
. Возможна потеря
данных при неправильном обновлении.
Для проверки выполнить:
$ docker compose ls
NAME STATUS CONFIG FILES
teamstorm running(20) ./deploy/offline_build/teamstorm/docker-compose.yml
testit running(20) ./deploy/offline_build/testit/docker-compose.yml
Настройка сервера для установки кластера TeamStorm
-
Задайте параметры
vm.max_map_count=262144
иvm.overcommit_memory=1
: -
Заблокируйте все порты, кроме порта 80, необходимого для доступа к пользовательскому интерфейсу.
-
Опционально: для обслуживания системы посредством протокола SSH необходимо открыть порт 22 (может быть переназначено на конкретной конфигурации). Для работы по HTTPS необходимо открыть порт 443. Пример открытия доступа к портам для CentOS 8:
Чистая установка
-
Распакуйте архив сборки в целевую директорию, например:
-
Зайдите в любую из директорий
testit
илиteamstorm
и запустите скрипт установки:
Установка обычно занимает не более 5 минут.
Пожалуйста, дождитесь завершения и перейдите к проверке работоспособности приложения.
Обновление
ВНИМАНИЕ
Перед обновлением рекомендуем делать резервное копирование во избежание потери данных.
-
Если у вас уже был ранее установлен TeamStorm, то перенесите директории с артефактами
testit
иteamstorm
в другое месторасположение, например: -
Распакуйте архив сборки, например:
-
После завершения разархивирования сравните файлы конфигураций
.env
иdocker-compose.yml
с файлами из предыдущей версии и внесите необходимые изменения, например:user@server: ~ $ diff testit/.env /tmp/teamstorm_previous/testit/.env << FRONTEND_URL="http://localhost" >> FRONTEND_URL="https://teamstorm.mycompany.io" vi testit/.env ... FRONTEND_URL="teamstorm.mycompany.io" user@server: ~ $ diff testit/docker-compose.yml /tmp/teamstorm_previous/testit/docker-compose.yml user@server: ~ $ diff teamstorm/.env /tmp/teamstorm_previous/teamstorm/.env user@server: ~ $ diff teamstorm/docker-compose.yml /tmp/teamstorm_previous/teamstorm/docker-compose.yml
-
Зайдите в любую из директорий
testit
илиteamstorm
и запустите скрипт установки:
Установка обычно занимает не более 5 минут.
Пожалуйста, дождитесь завершения и перейдите к проверке работоспособности приложения.
Ended: Установка и обновление в Docker
Установка в Kubernetes ↵
Установка в Kubernetes
Раздел описывает развертывание системы управления задачами TeamStorm в кластере Kubernetes и содержит подразделы:
Требования
- Установленный в кластере ingress-контроллер, например, Nginx Ingress Controller.
- Наличие Kubectl.
- Наличие Helm.
- Настроенный поставщик Persistent Volumes.
Состав поставки
Стандартная поставка представляет собой файловый архив вида:
teamstorm_helm_v%Release%.tgz
, где
%Release%
- версия программного обеспечения TeamStorm.
Архив поставки
Распакуйте архив поставки teamstorm_helm_v%Release%.tgz
:
```shell
tar -xzvf teamstorm_helm_v%Release%.tgz
```
Содержимое разархивированных директорий
Структура распакованного архива
```shell
.
├──teamstorm_v2.X # Teamstorm helm charts
├──testit_v4.X # TestIt helm charts
```
Структура каталога Teamstorm
Структура каталога TeamStorm имеет следующий вид:
```shell
.
├── temp
│ ├── temps
│ │ ├── cwm-networkpolicy.yaml
│ │ ├── deployment.yaml
│ │ ├── hpa.yaml
│ │ └── serviceaccount.yaml
│ ├── ingress.yaml
│ └── service.yaml
├── templates
│ ├── Configmaps # Конфигурационные файлы для сервисов и
│ │ ├── attachment-configmap.yaml
│ │ ├── comment-configmap.yaml
│ │ ├── trusted-ca-configmap.yaml
│ │ ├── ssl-configmap.yaml
| | └── ...
│ ├── Deployments
│ │ ├── attachment.yaml
│ │ └── comment.yaml
│ ├── Jobs
│ │ └── db-migration-runner.yaml
│ ├── PVs # Конфигурационные файлы для каждого хранилища
│ │ ├── cwm-rabbitmq-certificates-volume-persistentvolumeclaim.yaml
│ │ ├── cwm-rabbitmq-volume-persistentvolumeclaim.yaml
│ │ └── database-service-volume-persistentvolumeclaim.yaml
│ ├── Secrets
│ │ └── registry.yaml
│ ├── Services # Файлы описания каждого сервиса
│ │ ├── attachment.yaml
│ │ ├── comment.yaml
| | ├── ...
│ ├── tests
│ │ └── test-connection.yaml
│ ├── _helpers.tpl
│ └── NOTES.txt
├── Chart.yaml
└── values.yaml # Файл с основными параметрами
```
Структура каталога Test IT
Структура каталога Test IT имеет следующий вид:
```shell
.
├── CHANGELOG.md # Changelog
├── jobs
│ ├── minio
│ │ ├── backup
│ │ │ ├── configmap.yaml
│ │ │ └── job.yaml
│ │ ├── docker-to-k8s
│ │ │ ├── configmap.yaml
│ │ │ └── job.yaml
│ │ ├── export
│ │ │ ├── configmap.yaml
│ │ │ └── job.yaml
│ │ ├── import
│ │ │ ├── configmap.yaml
│ │ │ └── job.yaml
│ │ └── restore
│ │ ├── configmap.yaml
│ │ └── job.yaml
│ └── postgres
│ ├── backup
│ │ ├── configmap.yaml
│ │ └── job.yaml
│ ├── docker-to-k8s
│ │ ├── configmap.yaml
│ │ └── job.yaml
│ ├── export
│ │ ├── configmap.yaml
│ │ └── job.yaml
│ ├── import
│ │ ├── configmap.yaml
│ │ └── job.yaml
│ └── restore
│ ├── configmap.yaml
│ └── job.yaml
├── licenses-backend.txt # Справочная информация о лицензиях
├── licenses-frontend.txt
├── scripts # Каталог со скриптами
│ ├── 4.1.0-4.2.4_upgrade_plan.yaml
│ ├── 4.2.4-4.3.1_upgrade_plan.yaml
│ ├── docker-compose.minio-export.yml
│ ├── k8s_backup.sh
│ ├── k8s_minio_migrate.sh
│ ├── k8s_postgres_migrate.env
│ ├── k8s_postgres_migrate.sh
│ ├── k8s_restore.sh
│ ├── minio-backup.sh
│ ├── move_to_k8s.sh
│ └── pre_k8s_backup.sh
├── testit_backend # Каталог с файлами, описания служб
│ ├── Chart.yaml
│ ├── templates
│ │ ├── configmaps # Конфигурация служб
│ │ │ ├── appsettings
│ │ │ │ ├── auth.yaml
│ │ │ │ ├── ...
│ │ │ │ └── webapi.yaml
│ │ │ ├── auth.yaml
│ │ │ ├── ...
│ │ │ ├── ssl
│ │ │ │ ├── auth-cache-ssl.yaml
│ │ │ │ ├── ca-bundle.yaml
│ │ │ │ ├── influxdb-ssl.yaml
│ │ │ │ ├── minio-ssl.yaml
│ │ │ │ ├── postgres-ssl.yaml
│ │ │ │ └── rabbitmq-ssl.yaml
│ │ │ └── webapi.yaml
│ │ ├── deployments
│ │ │ ├── auth.yaml
│ │ │ ├── ...
│ │ │ └── webapi.yaml
│ │ ├── services
│ │ │ ├── auth-cache.yaml
│ │ │ ├── ...
│ │ │ └── webapi.yaml
│ │ └── statefulsets
│ │ ├── auth-cache.yaml
│ │ ├── influxdb.yaml
│ │ ├── minio.yaml
│ │ ├── postgres.yaml
│ │ └── rabbitmq.yaml
│ ├── values-override.yaml
│ ├── values-ssl.yaml
│ └── values.yaml
└── testit_frontend # Конфигурация веб-сервера
├── Chart.yaml
├── templates
│ ├── configmaps
│ │ └── frontend.yaml
│ ├── deployments
│ │ └── frontend.yaml
│ └── services
│ ├── frontend.yaml
│ └── ingress.yaml
├── values-override.yaml
├── values-ssl.yaml
└── values.yaml # Основной конфигурационный файл
```
Подготовка к установке
Для обновления TeamStorm до версии 2.61.0 и выше необходимо предварительно обновить TeamStorm до версии 2.33.
Перед обновлением рекомендуется создать резервную копию TeamStorm и Test IT.
Так как работа TeamStorm требует наличие работающего программного обеспечения Test IT, то для успешного старта вам нужно внести следующие изменения в конфигурацию:
-
Убедитесь в том, что параметр
CWM_ENABLED: "true"
дляtestit-backend/values.yaml
иtestit-frontend/values.yaml
: -
Укажите DNS-имена для следующих служб TeamStorm в файле конфигурации Test IT
testit-frontend/values.yaml
, учитывая имя пространства Kubernetesteamstorm
:general: config: CWM_ENABLED: "true" CWM_S3_BUCKET_NAME: "cwm" CWM_S3_BUCKET_SECRET_KEY: "secretKey" WIKI_S3_BUCKET_NAME: "wiki" WIKI_S3_BUCKET_SECRET_KEY: "secretKey" TASK_TRACKER_GATEWAY_API: "task-tracker-gateway-api.teamstorm:8080" WIKI_GATEWAY_API_UPSTREAM: "wiki-gateway-api.teamstorm:8080" TASK_TRACKER_WEB_APP: "task-tracker-web-app.teamstorm:8080" NOTIFICATION_SERVICE_HUB: "notification-service-hub.teamstorm:8080" CWM_PUBLIC_GATEWAY_API: "cwm-public-gateway-api.teamstorm:8080"
-
Сгенерируйте значения параметров
CWM_S3_BUCKET_SECRET_KEY
иWIKI_S3_BUCKET_SECRET_KEY
. Обратите внимание, что недопустимым символом является$
. -
Убедитесь в соответствии выставленных значений параметров
CWM_S3_BUCKET_SECRET_KEY
иWIKI_S3_BUCKET_SECRET_KEY
в файлах конфигурации TeamStorm и Test ITvalues.yml
,teamstorm/values.yml
:testit-frontend/values.yaml
-
Параметры секции
main.tms
конфигурационного файла TeamStorm должны указывать на соответствующие сервисы Test IT:
main:
...
tms:
auth_url: "http://auth.testit:8080"
auth_cache_url: "auth-cache.testit"
avatars_api_url: "http://avatars-api.testit:8080/api/"
license_url: "http://license-service.testit:8080"
s3_endpoint_url: "http://minio.testit:9000"
s3_access_key: "testitAccessKey"
s3_secret_key: "testitSecretKey"
use_auth_openid: "false"
...
ВНИМАНИЕ
Конфигурационные файлы предустановлены с учётом использования пространств имен
testit
и teamstorm
. В случае их изменения требуется отразить это в
конфигурационных файлах.
Установка
ВНИМАНИЕ
Перед установкой еще раз убедитесь в корректности выполненных шагов по подготовке к старту кластера.
Конфигурация Test IT
Примените настройки, выполненные относительно Test IT при предварительной
настройке, где ${TESTIT_NAMESPACE}
— имя пространства Kubernetes, в
котором развернуто ПО Test IT:
cd ~/testit_vX.XX #
# Установите приложения бэкенда.
helm upgrade -n ${TESTIT_NAMESPACE} /
-f testit_frontend/values-override.yaml /
./testit_frontend
# Дождитесь начала работы всех модулей внешнего интерфейса
watch -n 1 kubectl -n ${TESTIT_NAMESPACE} get pods -l app=frontend
Распаковка архива teamstorm_helm_vXXX.tgz
Распакуйте файлы приложения TeamStorm и перейдите в разархивированную директорию
Основные переменные кластера
Задайте основные переменные в файле teamstorm/values.yaml
Структура values.yaml
и основные переменные конфигурации
Имя переменной | Значение | Описание |
---|---|---|
main |
Блок переменных | |
├──.сwm. |
Основной блок переменных Teamstorm | |
└────frontend_url |
https://testit.cluster.local |
Укажите DNS имя ingress контроллера |
├──.storage. |
Блок переменных для PVC разделов | |
└────storageClassName |
Измените для уточнения типа раздела | |
├──.mailserver. |
Блок переменных для работы почтовых нотификаций | |
└────host |
${MAIL_SERVER_HOST} |
DNS имя вашего SMTP сервера |
└────port |
${MAIL_SERVER_PORT} |
SMTP порт сервера |
└────from |
deamon@service.com |
Определяет параметр заголовка письма уведомления from |
└────display_name |
Mail Deamon |
Определяет имя отправителя порт |
└────user_name |
${MAIL_SERVER_HOST} |
SMTP имя пользователя |
└────password |
${MAIL_SERVER_PORT} |
SMTP пароль |
Запуск кластера приложения TeamStorm
Для запуска кластера приложения TeamStorm выполните следующую команду, установив значение:
${TEAMSTORM_NAMESPACE}
:
Stateless режим работы служб
ВНИМАНИЕ
Сервисы кластера TeamStorm работают в режиме stateless. Мы настоятельно рекомендуем вынести такие службы как postgres, minio и redis за пределы кластера kubernetes.
Рекомендации по установке сервера баз данных Postgres
Для корректной работы сервера необходима версия Postgres 14 и выше с установленным
расширением rum
.
Для установки расширения rum
выполните команду:
Ended: Установка в Kubernetes
Настройка почтового сервера для уведомлений
Используйте доверенные сертификаты для соединения с использованием самоподписных сертификатов.
Для этого необходимо положить файл, содержащий сгенерированный сертификат в формате PEM, в docker volume trusted-certificates-volume
.
Например:
$ ls /var/lib/docker/volumes/teamstorm_trusted-certificates-volume/_data/
/var/lib/docker/volumes/teamstorm_trusted-certificates-volume/_data/host.pem
MAIL_SERVER_USE_CUSTOM_TRUSTED_CA_BUNDLE="true"
Внесите изменения в env-файл:
- Укажите хост размещения TeamStorm:
CWM_FRONTEND_URL="https://teamstorm.contoso.com"
- Для использования полной проверки без исключений используйте значение
MAIL_SERVER_USE_CUSTOM_TRUSTED_CA_BUNDLE="false"
Значение по умолчанию: MAIL_SERVER_USE_CUSTOM_TRUSTED_CA_BUNDLE="false"
- При пустом значении
MAIL_SERVER_HOST
сервер не отправляет сообщения. Укажите хост почтового сервера. Например:MAIL_SERVER_HOST="smtp.mail.io"
Значение по умолчанию: MAIL_SERVER_HOST=""
- Укажите порт почтового сервера. Например:
MAIL_SERVER_PORT="25"
Значение по умолчанию: MAIL_SERVER_PORT="1025"
- Укажите сервисный аккаунт обратный адрес которого будет указан в заголовке сообщения. Например:
MAIL_SERVER_FROM="deamon@mail.io"
Значение по умолчанию: MAIL_SERVER_FROM="deamon@service.com"
- Укажите имя сервисного аккаунта для отображения . Например:
MAIL_SERVER_DISPLAY_NAME="Teamstorm Mail Notification"
Значение по умолчанию: MAIL_SERVER_DISPLAY_NAME="Mail Deamon"
- Укажите имя пользователя для аутентификации на сервере SMTP/IMAP . Например:
MAIL_SERVER_USER_NAME="username"
Значение по умолчанию: MAIL_SERVER_USER_NAME=" "
- Укажите пароль для аутентификации. Например:
MAIL_SERVER_PASSWORD="password"
Значение по умолчанию: MAIL_SERVER_PASSWORD=""
- Для подключения к почтовому серверу через STARTTLS укажите:
MAIL_SERVER_USE_START_TLS="true"
Значение по умолчанию: MAIL_SERVER_USE_START_TLS="false"
-
Для подключения к почтовому серверу через SSL укажите:
MAIL_SERVER_USE_SSL="true"
Значение по умолчанию:
MAIL_SERVER_USE_SSL="false"
-
Укажите идентификатор часового пояса, например:
MAIL_SERVER_TZ="Europe/Moscow"
По умолчанию установлено московское время:
MAIL_SERVER_TZ="Europe/Moscow"
Таблица идентификаторов временных зон: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
-
После внесения изменений перезапустите систему.
Настройки скриптовой автоматизации
Для настройки поведения API используются переменные окружения, пробрасываемые в контейнер docker
:
AUTOMATION_SCRIPT_ENGINE_ENABLE
— используется ли вообще скриптовая автоматизация.
Если не используется, то соответствующего пункта не будет в GUI (под учетной записью администратора),
а скрипты не станут запускаться. Является системной настройкой, которую получает сайт.
AUTOMATION_SCRIPT_TIMEOUT
— общий таймаут выполнения всего скрипта, секунды, по умолчанию — 10.
Следующие настройки относятся исключительно к API
пользовательских запросов к внешним ресурсам по HTTP (метод SendHttpRequest
).
AUTOMATION_SCRIPT_HTTP_TIMEOUT
— таймаут запросов, секунды, по умолчанию — 10.
AUTOMATION_SCRIPT_HTTP_RESPONSE_LENGTH
— максимальная длина возвращаемых данных, в байтах, по умолчанию — 1 мегабайт.
AUTOMATION_SCRIPT_HTTP_REQUEST_RETRY
— число попыток, по умолчанию — 4.
AUTOMATION_SCRIPT_HTTP_REQUEST_DELAY_MS
— промежуток времени между неудачными попытками, равномерный, в миллисекундах, по умолчанию — 1500.
Минимум ограничен программно в 1 секунду.
Настройка допустимого времени редактирования комментариев
Система ограничивает возможность редактировать комментарии по истечению допустимого времени.
Для увеличения или уменьшения допустимого времени редактирования используются переменная окружения, пробрасываемая в контейнер docker
:
COMMENT_EDIT_TIMEOUT_SECONDS
— допустимое время редактирования комментариев,
в секундах, по умолчанию — 3600 секунд.
Внесите изменения в env-файл:
- Измените период редактирования комментариев:
COMMENT_EDIT_TIMEOUT_SECONDS="3600"
- После внесения изменений перезапустите систему.
Изменение ссылки на видеоролик
Чтобы заменить приветственный видеоролик:
- Перейдите в папку, куда был распакован архив поставки TeamStorm.
- Найдите в файле
web_app.json
в папкеconfigs
из поставки TeamStorm ссылку на видеоролик.
teamstorm]$ cat ./configs/web_app.json
{
"External_link": ""https://vk.com/video_ext.php?oid=-216829582&id=456239131&hd=2""
}
- Замените существующую ссылку своей и сохраните изменения.
- Перезапустите TeamStorm:
docker compose -p teamstorm up -d
(выполняется в случае, когда изменения проводятся на уже установленной системе).
Проверка корректности установки
Для проверки корректности установки:
-
Убедитесь в том, что в Системе предсоздан пользователь с ролью администратора. Авторизуйтесь под учетной записью администратора
cwm_admin
. -
Убедитесь в том, что лицензии TeamStorm добавлены.
-
Убедитесь в том, что в системе есть другие пользователи, или добавьте нового пользователя (например, с именем user1).
-
Перейдите в настройки пространства, добавьте в пространство пользователя, созданного на шаге 3.
-
Перейдите в созданную задачу и отредактируйте ее:
-
поменяйте ее статус;
- выберите ответственным пользователя, созданного на шаге 3.
- добавьте описание;
-
добавьте вложение.
-
Убедитесь в том, что пользователю, созданному на шаге 3, пришло почтовое уведомление.
Установка выполнена корректно, если все шаги проверки выполняются.
Перезапуск и удаление
Перезапуск системы
Для перезапуска системы воспользуйтесь следующей командой:
Удаление системы
Для полного удаления системы и ее данных необходимо выполнить следующую команду:
cd teamstorm_v2.33.0
docker compose -f docker-compose.yml --project-name teamstorm down --volumes --timeout 120
Чтобы сохранить информацию для последующего использования, выполните команду без флага --volumes
.
Резервное копирование и восстановление ↵
Резервное копирование и восстановление
Раздел описывает операции резервного копирования TeamStorm и восстановления системы из резервной копии и содержит подразделы:
Резервное копирование
Данный раздел описывает процедуру сохранения данных кластера TeamStorm и Test IT на случай системных сбоев, отказа оборудования и непредвиденных ситуаций.
ВНИМАНИЕ
Для создания архива остановка кластера необязательна, но выполнение команд резервного копирования может негативно отразиться на работе пользователей.
Резервное копирование данных состоит из двух шагов.
-
Создание дампов баз данных PostgreSQL.
-
Создание файлового архива необходимых разделов docker-контейнеров.
Создание дампа баз данных PostgreSQL
Данная процедура описывает создание дампов баз данных PostgreSQL. Процедура автоматизирована и для запуска нужно выполнить следующие действия:
-
Перейдите в директорию
scripts
, которая находится внутри директории с артефактами TeamStorm.user@server: ~/teamstorm $ cd scripts user@server: ~/teamstorm/scripts $ ls -lha total 28 drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./ drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../ -rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh* -rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh* -rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh* -rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql
-
Создайте директорию там, где будет сохранен архив, например:
user@server: ~/teamstorm/scripts $ mkdir dumps user@server: ~/teamstorm/scripts $ ls -lha total 28 drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./ drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../ -rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh* -rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh* -rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh* drwxr-xr-x 2 user user 4096 Sep 19 13:26 dumps/ -rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql
-
Запустите скрипт
db_backup.sh
, указав целевую директорию, например:user@server: ~/teamstorm/scripts $ ./db_backup.sh ./dumps Creating backup: teamstorm_migrations_db_2023-09-20_09-42-00.bak container: database_service database: teamstorm_migrations_db Successfully copied 2.56kB to /home/tester/deploy/teamstorm/scripts/dumps/teamstorm_migrations_db_2023-09-20_09-42-00.bak Creating backup: teamstorm_attachment_db_2023-09-20_09-42-00.bak container: database_service database: teamstorm_attachment_db Successfully copied 9.22kB to /home/tester/deploy/teamstorm/scripts/dumps/teamstorm_attachment_db_2023-09-20_09-42-00.bak Creating backup: teamstorm_comment_db_2023-09-20_09-42-00.bak container: database_service database: teamstorm_comment_db Successfully copied 44kB to /home/tester/deploy/teamstorm/scripts/dumps/teamstorm_comment_db_2023-09-20_09-42-00.bak Creating backup: teamstormdb_2023-09-20_09-42-00.bak container: database_service database: teamstormdb Successfully copied 486kB to /home/tester/deploy/teamstorm/scripts/dumps/teamstormdb_2023-09-20_09-42-00.bak
В процессе выполнения вы увидите сообщения о создании архивов для каждой базы данных. По окончании будет создан конечный архив, сжатый с использованием aрхиватора gzip:
./dumps/teamstorm_wiki_db_2023-09-20_09-42-00.bak
./dumps/teamstorm_workflow_db_2023-09-20_09-42-00.bak
./dumps/teamstorm_workspace_db_2023-09-20_09-42-00.bak
./dumps/teamstormdb_2023-09-20_09-42-00.bak
./dumps/teamstorm_2023-09-20_09-42-00_backup.tgz
Процесс по созданию архива для кластера TeamStorm успешно завершен.
Повторите эти же шаги для кластера Test IT:
user@server: ~/teamstorm $ cd ../../testit/scripts
user@server: ~/testit/scripts $ mkdir dumps
user@server: ~/testit/scripts $ ./db_backup.sh ./dumps
Creating backup: container: backgrounddb database: backgrounddb
Successfully copied 57.9kB to /home/tester/deploy/testit/scripts/dumps/backgrounddb_2023-09-20_09-59-49.bak
Creating backup: container: avatars.db database: avatarsdb
...
./dumps/testit_2023-09-20_09-59-49_backup.tgz
Создание файлового архива необходимых разделов docker-контейнеров
Для создания копий разделов контейнеров кластера нужно иметь привилегии
пользователя root
, так как по-умолчанию только root
имеет доступ к этим
разделам файловой структуры.
-
Перейдите в директорию, где хранятся разделы docker-контейнеров. По умолчанию это
/var/lib/docker/volumes/
admin@server: ~/testit/scripts $ sudo -s root@server: ~/testit/scripts $ cd /var/lib/docker/volumes/ root@server: /var/lib/docker/volumes/ $ ls -lha drwx-----x 33 root root 4096 Sep 20 08:35 ./ drwx--x--- 13 root root 4096 Sep 20 08:35 ../ brw------- 1 root root 253, 0 Sep 20 08:35 backingFsBlockDev -rw------- 1 root root 131072 Sep 20 08:35 metadata.db drwx-----x 3 root root 4096 Sep 20 08:31 teamstorm_cwm-rabbit-volume/ drwx-----x 3 root root 4096 Sep 20 08:31 teamstorm_cwm-rabbitmq-certificates-volume/ drwx-----x 3 root root 4096 Sep 20 08:31 teamstorm_database-service-volume/ drwx-----x 3 root root 4096 Sep 20 08:31 teamstorm_ssl-volume/ drwx-----x 3 root root 4096 Sep 20 08:31 teamstorm_trusted-certificates-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_auth-cache-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_auth-cache-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_authdb-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_authdb-volume/ drwx-----x 3 root root 4096 Sep 20 08:37 testit_avatars-minio-data-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_avatars-minio-export-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_avatars-minio-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_avatars.db-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_avatars.db-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_backgrounddb-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_db-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_db-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_globalsearchdb-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_influx-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_influx-volume/ drwx-----x 3 root root 4096 Sep 20 08:35 testit_license-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_licensedb-volume/ drwx-----x 3 root root 4096 Sep 20 08:37 testit_minio-data-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_minio-export-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_minio-tls-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_rabbit-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_rabbitmq-certificates-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_rabbitmq-configuration-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_ssl-volume/ drwx-----x 3 root root 4096 Sep 20 08:34 testit_trusted-certificates-volume/ drwx-----x 3 root root 4096 Sep 20 08:35 testit_verification-volume/
-
Заархивируйте необходимые директории с помощью
tar
, например:
ВНИМАНИЕ
В данном примере указаны разделы, содержащие все данные, которые находятся в хранилище S3 minio, а также сертификаты SSL, которые вы, возможно, использовали для настройки HTTPS соединения testit.
Укажите другие разделы, если вы также их используете.
Финальным шагом должно быть сохранение трех файлов архива в ваше хранилище
резервных копий. При необходимости, процедуру можно автоматизировать с помощью
crontab
.
Восстановление из резервной копии
Данный раздел описывает процедуру восстановления данных для кластера TeamStorm и Test IT в случае системного сбоя.
ВНИМАНИЕ
Для восстановления работы кластера нужно установить "чистую" версию TeamStorm и Test IT
Перед восстановлением убедитесь, что cистема пустая и работает корректно
Восстановление данных из резервной состоит из двух шагов и выполняется в порядке, обратном созданию резервных копий.
-
Восстановление разделов docker-контейнеров.
-
Восстановление баз данных PostgreSQL из ранее созданных дампов.
Восстановление разделов docker-контейнеров
Для восстановления разделов контейнеров кластера нужно иметь привилегии
пользователя root
, так как по-умолчанию только root
имеет доступ к этим
разделам файловой структуры.
-
Создайте временную директорию и перейдите в нее. Затем скопируйте сюда архив, содержащий разделы контейнеров докер:
root@server: /root/ $ mkdir /tmp/volumes_backup root@server: /root/ $ cd /tmp/volumes_backup root@server: /tmp/volumes_backup/ $ scp backup-server:/teamstorm/volumes_backup.tgz . root@server: /tmp/volumes_backup/ $ tar -xzvf volumes_backup.tgz testit_ssl-volume/ testit_minio-data-volume/ testit_avatars-minio-data-volume/ root@server: /tmp/volumes_backup/ $ rm -f volumes_backup.tgz
-
Перенесите директории в папку c разделами
docker
. По умолчанию это/var/lib/docker/volumes/
ВНИМАНИЕ
Пользователь root
больше не нужен, остальные операции можно делать из-под "обычного" пользователя
Восстановление баз данных PostgreSQL из дампов
Данная процедура описывает баз данных PostgreSQL из предварительно созданных дампов. Процедура автоматизирована и для запуска нужно выполнить следующие действия:
-
Перейдите в директорию
scripts
, которая находится внутри директории с артефактами TeamStorm:user@server: ~/teamstorm $ cd scripts user@server: ~/teamstorm/scripts $ ls -lha total 28 drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./ drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../ -rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh* -rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh* -rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh* -rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql
-
Создайте здесь директорию
dumps
, сохраните туда архив и распакуйте его:user@server: ~/teamstorm/scripts $ mkdir dumps user@server: ~/teamstorm/scripts $ ls -lha total 28 drwxrwxr-x 3 user user 4096 Sep 19 13:24 ./ drwxrwxr-x 4 user user 4096 Sep 19 13:23 ../ -rwxrwx--- 1 user user 1270 Sep 18 11:22 copy_backup.sh* -rwxrwx--- 1 user user 1275 Sep 18 11:22 db_backup.sh* -rwxrwx--- 1 user user 1652 Sep 18 11:22 db_restore.sh* drwxr-xr-x 2 user user 4096 Sep 19 13:26 dumps/ -rw-rw-r-- 1 user user 1737 Sep 18 11:22 postgres-init.sql user@server: ~/teamstorm/scripts $ scp backup-server:/teamstorm/teamstorm_2023-09-20_09-42-00_backup.tgz ./dumps/ user@server: ~/teamstorm/scripts $ cd dumps user@server: ~/teamstorm/scripts/dumps/ $ tar -xzvf teamstorm_2023-09-20_09-42-00_backup.tgz ... user@server: ~/teamstorm/scripts $ cd ..
-
Запустите скрипт
db_restore.sh
, указав целевую директорию и общий суффикс, состоящий из временной метки и расширения, например, для файлов:
Общим суффикcом будет 2023-09-20_09-42-00.bak
. Таким образом, команда для восстановления будет выглядеть следующим образом:
ВНИМАНИЕ
Обращайте внимание на лог восстановления, при необходимости перенаправьте поток вывод в файл для дальнейшего анализа.
Пример успешного восстановления:
```shell
...
Recovering from backup: container: teamstorm-database_service-1 teamstormdb teamstormdb_15-09-2023_15-13.bak
UPDATE 1
pg_terminate_backend
----------------------
t
t
t
t
(4 rows)
DROP DATABASE
CREATE DATABASE
```
Пример неудачной попытки восстановления из несуществующего дампа.
```shell
Recovering from backup: container: teamstorm-database_service-1 teamstorm_migrations_db teamstorm_migrations_db_15-09-2023_15-13.bak
lstat /home/tester/deploy/teamstorm/scripts/dumps/teamstorm_migrations_db_15-09-2023_15-13.bak:
no such file or directory
UPDATE 1
pg_terminate_backend
----------------------
(0 rows)
DROP DATABASE
CREATE DATABASE
pg_restore: error: could not open input file "/teamstorm_migrations_db_15-09-2023_15-13.bak":
No such file or directory
```
После успешного восстановления перезапустите кластер teamstorm
:
Процесс по восстановлению для кластера TeamStorm успешно завершен.
Повторите те же шаги для кластера Test IT:
```shell
user@server: ~/teamstorm $ cd ../../testit/scripts
user@server: ~/testit/scripts $ mkdir dumps
user@server: ~/testit/scripts $ scp backup-server:/teamstorm/testit_2023-09-20_09-59-49_backup.tgz ./dumps/
user@server: ~/testit/scripts $ cd dumps
user@server: ~/testit/scripts/dumps/ $ tar -xzvf teamstorm_2023-09-20_09-42-00_backup.tgz
...
user@server: ~/testit/scripts $ cd ..
user@server: ~/testit/scripts $ ./db_restore.sh ./dumps 2023-09-20_09-59-49.bak
Recovering from backup: container:
...
```
После успешного восстановления перезапустите кластер testit
:
Процесс по восстановлению для кластера Test IT успешно завершен.
Убедитесь в работоспособности приложения после восстановления.
Ended: Резервное копирование и восстановление
Ended: Версия 2.61.0 и выше
Архивные версии ↵
Архивные версии
Раздел содержит описание установки архивных версий TeamStorm:
Версия 2.33.3 ↵
Версия 2.33.3
Назначение документа
Инструкция описывает действия системного администратора по установке и обновлению TeamStorm v. 2.33.3 и выше.
Инструкция содержит разделы:
Системные требования
Таблица 1 "Системные требования"
Ресурс | Кол-воМинимально / Рекомендуется | Комментарий |
---|---|---|
CPU | x86-64 / 4 / 8 cores | *Зависит от нагрузки на кластер |
RAM | 8 / 16 Gb | *Зависит от нагрузки на кластер |
Disk space | 100 Gb | **Зависит от объёма хранимой информации |
Внимание
* – смотри раздел "Нагрузочное тестирование" ** – Возможен перенос данных в хранилище S3.
Требование к установленному программному обеспечению
Программное обеспенчение Teamstorm использует технологию изоляции окружения
docker
для обеспечения надёжной и отказоустойчивой системы и может быть
установлено на любой операционной системе семейства Linux, поддерживающией
эту технологию. Мы всегда рекомендуем пользоваться последней стабильной версией
вашей операционной системы.
Установка Docker Compose
Используйте официальную документацию к дистрибутиву вашей операционной системы
для установки пакетов docker
и docker compose
.
Требования к версиям
Приложение | Версия | Документация |
---|---|---|
Docker Engine | 20 + | Docker engine |
Docker Compose | 2 + | Docker Compose |
TestIT | 4.4 + | TestIT |
Внимание
Возможна работа кластера Teamstorm с более старыми версиями пакетов docker
и docker-compose
, но в таком случае ответственность за стабильную работу
лежит на лице, осуществляющем установку.
Предварительная подготовка и настройка сервера
Данная инструкция описывает предварительную настройку сервера для установки кластера Teamstorm.
-
Задайте параметры
vm.max_map_count=262144
иvm.overcommit_memory=1
: -
Заблокируйте все порты, кроме порта 80, необходимого для доступа к пользовательскому интерфейсу.
-
Опционально: для обслуживания системы посредством протокола SSH, необходимо открыть порт 22 (может быть переназначено на конкретной конфигурации). Для работы по HTTPS необходимо открыть порт 443. Пример открытия доступа к портам для CentOS 8:
Установка чистой версии Teamstorm
-
Распакуйте архив сборки в целевую директорию, например:
-
Зайдите в любую из директорий
testit
илиteamstorm
и запустите скрипт установки:
Установка обычно занимает не более 5 минут. Пожалуйста, дождитесь завершения и откройте браузер для проверки работоспособности приложения.
Обновление Teamstorm
ВНИМАНИЕ
Перед обновлением всегда лучше делать резервное копирование во избежание потери данных.
-
Если у вас уже был ранее установлен Teamstorm, то перенесите директории с артефактами
testit
иteamstorm
в другое месторасположение, например: -
Распакуйте архив сборки, например:
-
После завершения разархивирования сравните файлы конфигураций
.env
иdocker-compose.yml
с файлами из предыдущей версии и внесите необходимые изменения, например:user@server: ~ $ diff testit/.env /tmp/teamstorm_previous/testit/.env << FRONTEND_URL="http://localhost" >> FRONTEND_URL="https://teamstorm.mycompany.io" vi testit/.env ... FRONTEND_URL="teamstorm.mycompany.io" user@server: ~ $ diff testit/docker-compose.yml /tmp/teamstorm_previous/testit/docker-compose.yml user@server: ~ $ diff teamstorm/.env /tmp/teamstorm_previous/teamstorm/.env user@server: ~ $ diff teamstorm/docker-compose.yml /tmp/teamstorm_previous/teamstorm/docker-compose.yml
-
Зайдите в любую из директорий
testit
илиteamstorm
и запустите скрипт установки:
Установка обычно занимает не более 5 минут. Пожалуйста, дождитесь завершения и откройте браузер для проверки работоспособности приложения.
Установка Teamstorm в уже существующий кластер TestIT
Используйте эту инструкцию если у вас ранее уже была установлено программное обеспечение TestIt, и вы хотите использовать доустановить Teamstorm.
ВНИМАНИЕ
Перед обновлением всегда лучше делать резервное копирование во избежание потери данных.
-
Переместите артефакты предыдущей установки TestIt во временную директорию, например:
-
Положите и распакуйте архив в целевую директорию, например:
user@server: ~ $ scp somewhere:~/teamstorm_full_v2.33.3.tgz . user@server: ~ $ tar -xzvf teamstorm_full_v2.33.3.tgz ./teamstorm/ ./teamstorm/scripts/ ./teamstorm/scripts/postgres-init.sql ./teamstorm/scripts/db_backup.sh ./teamstorm/scripts/db_restore.sh ./teamstorm/configs/ ./teamstorm/configs/rabbitmq_enabled_plugins ./teamstorm/configs/postgres_exporter.yml ./teamstorm/docker-compose.yml ./teamstorm/.env ./teamstorm/setup_teamstorm.sh ./teamstorm/setup.sh ./teamstorm/images.list ./teamstorm/images.tar ...
-
Сравните файлы установок предыдущей установки TestIt с новой версией и синхронизируйте ранее выполненные изменения. Новые переменные можно пока оставить без изменений. Переменную
CWM_ENABLED
оставить в значении вtrue
, например:$ diff testit/docker-compose.yml /tmp/previous/testit/docker-compose.yml << - 443:8443/tcp >> # - 443:8443/tcp >> FRONTEND_URL="https://teamstorm.mycompany.io" << CWM_ENABLED="true"
-
Теперь нужно убедиться в соответствии следующих переменных
testit/.env
teamstorm/.env
Комментарий FRONTEND_URL CWM_FRONTEND_URL Например: "https://teamstorm.mycompany.ru" CWM_S3_BUCKET_SECRET_KEY CWM_S3_BUCKET_SECRET_KEY Переменная не должна содержать символ $
WIKI_S3_BUCKET_SECRET_KEY WIKI_S3_BUCKET_SECRET_KEY Переменная не должна содержать символ $
-
Если вы уверены, что выполнили все предыдущие шаги корректно, то перейдите в директорию
teamstorm
илиtestit
и запустите скрипт установки, например:
Общие рекомендации
-
Не работайте из-под пользователя
root
. Для работы приложения достаточно создать пользователя и добавить его в группуdocker
: -
Создайте отдельную директорию, в которой вы будете хранить артефакты установки.
-
Артефакты предыдущих установок сохраняйте в заранее отведенном месте.
-
Используйте мониторинг, чтобы отслеживать нагрузку на сервер.
Резервное копирование и восстановление ↵
Резервное копирование и восстановление
Раздел описывает операции резервного копирования TeamStorm и восстановления системы из резервной копии и содержит подразделы:
Ended: Резервное копирование и восстановление
Установка в Kubernetes ↵
Установка в Kubernetes
Данное руководство описывает развёртывание системы управления задачами Teamstorm в кластере Kubernetes.
Требования
-
Установленный в кластере ingress-контроллер, например, Nginx Ingress Controller
-
Наличие Kubectl
-
Наличие Helm
-
Настроенный поставщик Persistent Volumes
Состав поставки
Стандартная поставка представляет собой файловый архив вида:
teamstorm_helm_v%Release%.tgz
, где %Release%
- версия
программного обеспечения Teamstorm
-
Распакуйте архив поставки
teamstorm_helm_v%Release%.tgz
: -
Содержимое разархивированных директорий будет иметь следующую структуру:
-
Структура каталога Teamstorm:
. ├── temp │ ├── temps │ │ ├── cwm-networkpolicy.yaml │ │ ├── deployment.yaml │ │ ├── hpa.yaml │ │ └── serviceaccount.yaml │ ├── ingress.yaml │ └── service.yaml ├── templates │ ├── Configmaps # Конфигурационные файлы для каждого из сервисов │ │ ├── attachment-configmap.yaml │ │ ├── comment-configmap.yaml | | ├── ... │ ├── Deployments │ │ ├── attachment.yaml │ │ ├── comment.yaml │ ├── Jobs │ │ ├── attachment.yaml | | ├── ... │ ├── PVs # Конфигурационные файлы для каждого хранилища │ │ ├── cwm-rabbitmq-certificates-volume-persistentvolumeclaim.yaml │ │ ├── cwm-rabbitmq-volume-persistentvolumeclaim.yaml │ │ ├── database-service-volume-persistentvolumeclaim.yaml │ │ ├── ssl-volume-persistentvolumeclaim.yaml │ │ └── trusted-certificates-volume-persistentvolumeclaim.yaml │ ├── Secrets │ │ └── registry.yaml │ ├── Services # Файлы описания каждого сервиса │ │ ├── attachment.yaml │ │ ├── comment.yaml | | ├── ... │ ├── tests │ │ └── test-connection.yaml │ ├── _helpers.tpl │ └── NOTES.txt ├── Chart.yaml └── values.yaml # Файл с основными параметрами
-
Структура каталога TestIT:
. ├── CHANGELOG.md # Changelog ├── jobs │ ├── minio │ │ ├── backup │ │ │ ├── configmap.yaml │ │ │ └── job.yaml │ │ ├── docker-to-k8s │ │ │ ├── configmap.yaml │ │ │ └── job.yaml │ │ ├── export │ │ │ ├── configmap.yaml │ │ │ └── job.yaml │ │ ├── import │ │ │ ├── configmap.yaml │ │ │ └── job.yaml │ │ └── restore │ │ ├── configmap.yaml │ │ └── job.yaml │ └── postgres │ ├── backup │ │ ├── configmap.yaml │ │ └── job.yaml │ ├── docker-to-k8s │ │ ├── configmap.yaml │ │ └── job.yaml │ ├── export │ │ ├── configmap.yaml │ │ └── job.yaml │ ├── import │ │ ├── configmap.yaml │ │ └── job.yaml │ └── restore │ ├── configmap.yaml │ └── job.yaml ├── licenses-backend.txt # Справочная информация о лицензиях ├── licenses-frontend.txt ├── scripts # Каталог со скриптами │ ├── 4.1.0-4.2.4_upgrade_plan.yaml │ ├── 4.2.4-4.3.1_upgrade_plan.yaml │ ├── docker-compose.minio-export.yml │ ├── k8s_backup.sh │ ├── k8s_minio_migrate.sh │ ├── k8s_postgres_migrate.env │ ├── k8s_postgres_migrate.sh │ ├── k8s_restore.sh │ ├── minio-backup.sh │ ├── move_to_k8s.sh │ └── pre_k8s_backup.sh ├── testit_backend # Каталог с файлами, описания служб │ ├── Chart.yaml │ ├── templates │ │ ├── configmaps # Конфигурация служб │ │ │ ├── appsettings │ │ │ │ ├── auth.yaml │ │ │ │ ├── ... │ │ │ │ └── webapi.yaml │ │ │ ├── auth.yaml │ │ │ ├── ... │ │ │ ├── ssl │ │ │ │ ├── auth-cache-ssl.yaml │ │ │ │ ├── ca-bundle.yaml │ │ │ │ ├── influxdb-ssl.yaml │ │ │ │ ├── minio-ssl.yaml │ │ │ │ ├── postgres-ssl.yaml │ │ │ │ └── rabbitmq-ssl.yaml │ │ │ └── webapi.yaml │ │ ├── deployments │ │ │ ├── auth.yaml │ │ │ ├── ... │ │ │ └── webapi.yaml │ │ ├── services │ │ │ ├── auth-cache.yaml │ │ │ ├── ... │ │ │ └── webapi.yaml │ │ └── statefulsets │ │ ├── auth-cache.yaml │ │ ├── influxdb.yaml │ │ ├── minio.yaml │ │ ├── postgres.yaml │ │ └── rabbitmq.yaml │ ├── values-override.yaml │ ├── values-ssl.yaml │ └── values.yaml └── testit_frontend # Конфигурация веб-сервера ├── Chart.yaml ├── templates │ ├── configmaps │ │ └── frontend.yaml │ ├── deployments │ │ └── frontend.yaml │ └── services │ ├── frontend.yaml │ └── ingress.yaml ├── values-override.yaml ├── values-ssl.yaml └── values.yaml # Основной конфигурационный файл
Предварительная настройка параметров
Так как работа Teamstorm требует наличие работающего программного обеспечения TestIT, то для успешного старта вам нужно внести следующие изменения в конфигурацию :ts-testit: Teamstorm:
-
Убедитесь в том, что параметр
CWM_ENABLED: "true"
дляtestit-backend/values.yaml
иtestit-frontend/values.yaml
: -
Укажите DNS имена для следующих служб Teamstorm в файле конфигурации TestIt
testit-frontend/values.yaml
, учитывая имя пространства Kubernetesteamstorm
:general: config: CWM_ENABLED: "true" CWM_S3_BUCKET_NAME: "cwm" CWM_S3_BUCKET_SECRET_KEY: "secretKey" WIKI_S3_BUCKET_NAME: "wiki" WIKI_S3_BUCKET_SECRET_KEY: "secretKey" TASK_TRACKER_GATEWAY_API: "task-tracker-gateway-api.teamstorm:8080" WIKI_GATEWAY_API_UPSTREAM: "wiki-gateway-api.teamstorm:8080" TASK_TRACKER_WEB_APP: "task-tracker-web-app.teamstorm:8080" NOTIFICATION_SERVICE_HUB: "notification-service-hub.teamstorm:8080" CWM_PUBLIC_GATEWAY_API: "cwm-public-gateway-api.teamstorm:8080"
Внимание
Сгенерируйте значения параметров
CWM_S3_BUCKET_SECRET_KEY
иWIKI_S3_BUCKET_SECRET_KEY
. Обратите внимание, что недопустимым символами являются$
: -
Убедитесь в соответствии выставленных значений параметров
CWM_S3_BUCKET_SECRET_KEY
иWIKI_S3_BUCKET_SECRET_KEY
в файлах конфигурации Teamstorm и TestITvalues.yml
:3.1
teamstorm/values.yml
:3.2
testit-frontend/values.yaml
-
Параметры секции
main.tms
конфигурационного файла Teamstorm должны указывать на соответствующие сервисы TestItmain: ... tms: auth_url: "http://auth.testit:8080" auth_cache_url: "auth-cache.testit" avatars_api_url: "http://avatars-api.testit:8080/api/" license_url: "http://license-service.testit:8080" s3_endpoint_url: "http://minio.testit:9000" s3_access_key: "testitAccessKey" s3_secret_key: "testitSecretKey" use_auth_openid: "false" ...
Внимание
Конфигурационные файлы предустановлены с учётом использования пространств имен
TestIt
иTeamstorm
. В случае их изменения требуются отразить это в конфигурационных файлах.
Установка приложения
Перед установкой ещё раз убедитесь в корректности выполненных шагов по подготовке к старту кластера.
-
Примените настройки выполненные относительно TestIt в шаге предварительной настройки, где
${TESTIT_NAMESPACE}
- имя пространства Kubernetes, в котором развёрнут TestIt: -
Распакуйте файлы приложения Teamstorm и перейдите в разархивированную директорию:
-
Для запуска кластера приложения Teamstorm выполните следующую команду, установив значение
${TEAMSTORM_NAMESPACE}
:
Ended: Установка в Kubernetes
Ended: Версия 2.33.3
Версия 2.0.0
Назначение документа
Документ описывает действия системного администратора по установке и настройке ПО TeamStorm v. 2.0.0 и выше.
Установка программного ПО
Установка ПО TeamStorm осуществляется только после предварительной установки ПО Test IT.
Установка Test IT описана в документации Test IT.
ПО TeamStorm необходимо устанавливать на тот же хост, на который установлено ПО Test IT.
Установка, перезапуск и удаление в Docker Compose
Требования
Docker Engine 20.10.17 и выше.
Test IT 4.2.4 и выше, рекомендуется последняя версия.
ВНИМАНИЕ
Для обновления до версии 2.0.0 необходимо предварительно обновить TeamStorm до версии 1.34.0
Состав поставки
images.tar
- архив с образами (только в архиве для автономной установки).
Состав поставки TeamStorm:
.env
- конфигурационный файл, содержащий переменные, используемые для обращения к контейнерам TeamStorm;docker-compose.yml
- конфигурационный файл Docker Compose.
Установка и настройка Test IT
-
Загрузите и установите ПО Test IT в соответствии с документацией Test IT.
-
Настройте поддержку TeamStorm в Test IT, заменив значение переменной
CWM_ENABLED
: -
Настройте поддержку WIKI в Test IT установив значения переменных
WIKI_ENABLED
иWIKI_S3_BUCKET_SECRET_KEY
: -
Следующие переменные в конфигурационных файлах
testit
иteamstorm
должны совпадать:testit/.env
teamstorm/.env
Комментарий FRONTEND_URL CWM_FRONTEND_URL Например, "https://teamstorm.mycompany.ru" CWM_S3_BUCKET_SECRET_KEY CWM_S3_BUCKET_SECRET_KEY Переменная не должна содержать символ $
WIKI_S3_BUCKET_SECRET_KEY WIKI_S3_BUCKET_SECRET_KEY Переменная не должна содержать символ $
-
Убедитесь, что сервис
auth
имеет настройку для редактирования ролей:
При обновлении с Test IT 4.2.4 на Test IT 4.3.0 дополнительные действия не требуются.
Подготовка
-
Измените значения переменных по умолчанию в .env-файле.
-
Задайте параметры
vm.max_map_count=262144
иvm.overcommit_memory=1
: -
Заблокируйте все порты, кроме порта 80, необходимого для доступа к пользовательскому интерфейсу.
-
Опционально: для обслуживания системы посредством протокола SSH необходимо открыть порт
22
(может быть переназначено на конкретной конфигурации). Для работы по HTTPS необходимо открыть порт443
. Пример открытия доступа к портам для CentOS 8:
Автономная установка
Данный тип установки поможет установить продукт, если сервер изолирован от сети Internet и нет возможности получить Docker-образы с публичных репозиториев.
-
Распакуйте содержимое архива автономной установки, например, в папку
~/teamstorm_v2.0.0
. -
Создайте сеть и кластер вручную или воспользуйтесь скриптом автоматического развертывания из поставки:
cd ${PROJECT_HOME}/teamstorm
docker network create yoonion_network
docker compose -p teamstorm -f docker-compose.yml up -d
cd ${PROJECT_HOME}/testit
docker compose -p testit -f docker-compose.yml up -d
Перезапуск системы
Для перезапуска системы воспользуйтесь следующей командой:
Удаление системы
Для полного удаления системы и ее данных необходимо выполнить следующую команду:
cd teamstorm_v2.0.0
docker compose -f docker-compose.yml --project-name teamstorm down --volumes --timeout 120
Чтобы сохранить информацию для последующего использования, выполните команду без флага --volumes
.
Описание .env файла
Репозиторий для скачивания образов установки TeamStorm:
Текущая версия программы:
Ключи доступа к хранилищу прикрепляемых файлов в TeamStorm (minio):
Параметры подключения к RabbitMQ:
RABBITMQ_DEFAULT_HOST="teamstorm_rabbitmq"
RABBITMQ_DEFAULT_PASS="password"
RABBITMQ_DEFAULT_USER="teamstorm"
RABBITMQ_DEFAULT_VHOST="teamstorm"
Параметры подключения к базе данных (при установке внешней базы данных поменять на свои значения):
POSTGRES_DEFAULT_DB="postgres"
POSTGRES_DEFAULT_USER="postgres"
POSTGRES_DEFAULT_PASSWORD="password"
POSTGRES_DEFAULT_PORT="5432"
POSTGRES_DEFAULT_HOST="database_service"
Для каждой конкретной базы данных значения по умолчанию можно заменить:
POSTGRES_ATTACHMENT_DB_HOST="${POSTGRES_DEFAULT_HOST}"
POSTGRES_ATTACHMENT_DB_DB="teamstorm_attachment_db"
POSTGRES_ATTACHMENT_DB_USER="${POSTGRES_DEFAULT_USER}"
POSTGRES_ATTACHMENT_DB_PASSWORD="${POSTGRES_DEFAULT_PASSWORD}"
POSTGRES_ATTACHMENT_DB_PORT="${POSTGRES_DEFAULT_PORT}"
POSTGRES_COMMENT_DB_HOST="${POSTGRES_DEFAULT_HOST}"
POSTGRES_COMMENT_DB_DB="teamstorm_comment_db"
POSTGRES_COMMENT_DB_USER="${POSTGRES_DEFAULT_USER}"
POSTGRES_COMMENT_DB_PASSWORD="${POSTGRES_DEFAULT_PASSWORD}"
POSTGRES_COMMENT_DB_PORT="${POSTGRES_DEFAULT_PORT}"
POSTGRES_DB_HOST="${POSTGRES_DEFAULT_HOST}"
Из вышеуказанных значений формируется строка подключения к базе данных:
PG_ATTACHMENT_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstorm_attachment_db;Username=${POSTGRES_ATTACHMENT_DB_USER};Password=${POSTGRES_ATTACHMENT_DB_PASSWORD};"
PG_COMMENT_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstorm_comment_db;Username=${POSTGRES_COMMENT_DB_USER};Password=${POSTGRES_COMMENT_DB_PASSWORD};"
PG_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstormdb;Username=${POSTGRES_DB_USER};Password=${POSTGRES_DB_PASSWORD};Pooling=true"
Настройте параметры почтового сервера для уведомлений:
CWMFRONTENDURL="${CWM_FRONTEND_URL}"
— указать хост размещения TeamStorm;
MAILSERVERSETTINGS__HOST="${MAIL_SERVER_HOST}"
— указать хост почтового сервера. Например, mail.outlook.com;
MAILSERVERSETTINGS__PORT="${MAIL_SERVER_PORT}"
— указать порт почтового сервера. Например, 587;
MAILSERVERSETTINGS__FROM="${MAIL_SERVER_FROM}"
— указать сервисный аккаунт от имени которого будет происходить нотификация. Например, service@emailserver.com;
MAILSERVERSETTINGS__DISPLAYNAME=
"${MAIL_SERVER_DISPLAY_NAME}"
— указать имя сервисного аккаунта для отображения . Например, Mail Service;
MAILSERVERSETTINGS__USESTARTTLS="${MAIL_SERVER_USE_START_TLS}"
— использовать TLS для подключения к почстовому серверу;
MAILSERVERSETTINGS__USESSL="${MAIL_SERVER_USE_SSL}"
— использовать SSL для подключения к почтовому серверу;
MAIL_SERVER_TZ
="Europe/Moscow"
— указать идентификатор часового пояса (по умолчанию установлено московское время).
Таблица идентификаторов находится по адресу https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
Системные параметры оставить без изменений:
Проверка корректности установки
Для проверки корректности установки:
-
Убедитесь в том, что в Системе предсоздан пользователь с ролью администратора. Авторизуйтесь под учетной записью администратора.
-
Убедитесь в том, что лицензии TeamStorm добавлены.
-
Убедитесь в том, что в системе есть другие пользователи, или добавьте нового пользователя.
-
Создайте пространство.
-
Создайте папку.
-
Создайте задачу.
-
Создайте страницу.
-
Перейдите в настройки пространства, добавьте в пространство пользователя, созданного на шаге 3.
-
Перейдите в созданную задачу и отредактируйте ее:
- поменяйте ее статус;
- выберите ответственным пользователя, созданного на шаге 3.
- добавьте описание;
- добавьте вложение.
-
Убедитесь в том, что пользователю, созданному на шаге 3, пришло почтовое уведомление.
При необходимости для осуществления проверки воспользуйтесь указаниями Руководства администратора по добавлению лицензий и пользователей и Руководства пользователя.
Установка выполнена корректно, если все шаги проверки выполняются.
Версия 1.30.0 и более поздние
Назначение документа
Документ описывает действия системного администратора по установке и настройке ПО TeamStorm v. 1.30.0 и выше.
Установка программного ПО
Установка ПО TeamStorm осуществляется только после предварительной установки ПО Test IT.
Установка Test IT описана в документации Test IT.
ПО TeamStorm необходимо устанавливать на тот же хост, на который установлено ПО Test IT.
Установка, перезапуск и удаление в Docker Compose
Требования
Docker Engine 20.10.17 и выше.
Состав поставки
images.tar
- архив с образами (только в архиве для автономной установки).
Состав поставки TeamStorm:
.env
- конфигурационный файл, содержащий переменные, используемые для обращения к контейнерам TeamStorm;docker-compose.cwm.yml
- конфигурационный файл Docker Compose.
Установка и настройка TestIT
- Загрузите и установите ПО TestIT в соответствии с документацией Test IT.
-
Настройте поддержку TeamStorm в Test IT, заменив значение переменной
CWM_ENABLED
-
При обновлении с Test IT 4.0.2 на Test IT 4.1.0 и выше, а TeamStorm с 1.30.0 на 1.31.0 и выше необходимо выставить переменную для сервиса auth:
CAN_EDIT_SYSTEM_ROLES: true
.
Подготовка
-
Измените значения переменных по умолчанию в .env-файле.
-
Задайте параметры
vm.max_map_count=262144
иvm.overcommit_memory=1
: -
Заблокируйте все порты, кроме порта 80, необходимого для доступа к пользовательскому интерфейсу.
-
Опционально: для обслуживания системы посредством протокола SSH, необходимо открыть порт 22 (может быть переназначено на конкретной конфигурации). Для работы по HTTPS необходимо открыть порт 443. Пример открытия доступа к портам для CentOS 8:
Автономная установка
Данный тип установки поможет установить продукт, если сервер изолирован от сети Internet и нет возможности получить Docker-образы с публичных репозиториев.
-
Распакуйте содержимое архива автономной установки, например, в папку
~/teamstorm_v1.30.0
. -
Выполните следующие команды:
Перезапуск системы
Для перезапуска системы воспользуйтесь следующей командой:
cd teamstorm_v1.30.0
docker compose -f docker-compose.cwm.yml --project-name teamstorm restart --timeout 120
Удаление системы
Для полного удаления системы и ее данных необходимо выполнить следующую команду:
cd teamstorm_v1.30.0
docker compose -f docker-compose.cwm.yml --project-name teamstorm down --volumes --timeout 120
Чтобы сохранить информацию для последующего использования, выполните команду
без флага --volumes
.
Описание .env файла
Репозиторий для скачивания образов установки TeamStorm:
Текущая версия программы:
Ключи доступа к хранилищу прикрепляемых файлов в TeamStorm (minio):
Параметры подключения к RabbitMQ:
RABBITMQ_DEFAULT_HOST="teamstorm_rabbitmq"
RABBITMQ_DEFAULT_PASS="password"
RABBITMQ_DEFAULT_USER="teamstorm"
RABBITMQ_DEFAULT_VHOST="teamstorm"
Параметры подключения к базе данных (при установке внешней базы данных поменять на свои значения):
POSTGRES_DEFAULT_DB="postgres"
POSTGRES_DEFAULT_USER="postgres"
POSTGRES_DEFAULT_PASSWORD="password"
POSTGRES_DEFAULT_PORT="5432"
POSTGRES_DEFAULT_HOST="database_service"
Для каждой конкретной базы данных значения по умолчанию можно заменить:
POSTGRES_ATTACHMENT_DB_HOST="${POSTGRES_DEFAULT_HOST}"
POSTGRES_ATTACHMENT_DB_DB="teamstorm_attachment_db"
POSTGRES_ATTACHMENT_DB_USER="${POSTGRES_DEFAULT_USER}"
POSTGRES_ATTACHMENT_DB_PASSWORD="${POSTGRES_DEFAULT_PASSWORD}"
POSTGRES_ATTACHMENT_DB_PORT="${POSTGRES_DEFAULT_PORT}"
POSTGRES_COMMENT_DB_HOST="${POSTGRES_DEFAULT_HOST}"
POSTGRES_COMMENT_DB_DB="teamstorm_comment_db"
POSTGRES_COMMENT_DB_USER="${POSTGRES_DEFAULT_USER}"
POSTGRES_COMMENT_DB_PASSWORD="${POSTGRES_DEFAULT_PASSWORD}"
POSTGRES_COMMENT_DB_PORT="${POSTGRES_DEFAULT_PORT}"
POSTGRES_DB_HOST="${POSTGRES_DEFAULT_HOST}"
Из вышеуказанных значений формируется строка подключения к базе данных:
PG_ATTACHMENT_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstorm_attachment_db;Username=${POSTGRES_ATTACHMENT_DB_USER};Password=${POSTGRES_ATTACHMENT_DB_PASSWORD};"
PG_COMMENT_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstorm_comment_db;Username=${POSTGRES_COMMENT_DB_USER};Password=${POSTGRES_COMMENT_DB_PASSWORD};"
PG_CONNECTION_STRING="Host=${POSTGRES_DEFAULT_HOST};Port=${POSTGRES_DEFAULT_PORT};Database=teamstormdb;Username=${POSTGRES_DB_USER};Password=${POSTGRES_DB_PASSWORD};Pooling=true"
Системные параметры, оставить без изменений:
Версия 1.29.0 и более ранние
Назначение документа
Документ описывает действия системного администратора по установке и настройке ПО TeamStorm версии 1.29.0 и ниже.
Установка программного ПО
Установка, перезапуск и удаление в Docker Compose
Требования
https://docs.docker.com/compose/install/
Docker Engine 20.10.17 и выше
Docker Compose 1.17.0 и выше
Состав поставки
images.tar - архив с образами (только в архиве для автономной установки). Установка TeamStorm выполняется вместе с установкой Test IT.
Состав поставки Test IT указан в документации на ПО Test IT.
Состав поставки TeamStorm:
setup.sh
- основной скрипт установки.env
- конфигурационный файл, содержащий переменные, используемые для обращения к контейнерам Teamstormdocker-compose.yml
- конфигурационный файл Docker Compose
Подготовка
- Измените дефолтные значения переменных в .env-файле.
-
Задайте параметры
vm.max_map_count=262144
иvm.overcommit_memory=1
: -
Заблокируйте все порты, кроме порта 80, необходимого для доступа к пользовательскому интерфейсу.
-
Опционально: для обслуживания системы посредством протокола SSH, необходимо открыть порт 22 (может быть переназначено на конкретной конфигурации). Для работы по HTTPS необходимо открыть порт 443. Пример открытия доступа к портам для CentOS 7:
Автономная установка
Данный тип установки поможет установить продукт, если сервер изолирован от сети Internet и нет возможности получить Docker-образы с публичных репозиториев.
-
Распакуйте содержимое архива автономной установки, например, в папку
~/teamstorm_v0.16.0
. -
Выполните следующие команды:
Перезапуск системы
Для перезапуска системы воспользуйтесь следующей командой:
cd teamstorm_v0.16.0
docker compose -f docker-compose.yml --project-name teamstorm restart --timeout 120
Удаление системы
Для полного удаления системы и ее данных необходимо выполнить следующую команду:
cd teamstorm_v0.16.0
docker compose -f docker-compose.yml --project-name teamstorm down --volumes --timeout 120
Чтобы сохранить информацию для последующего использования, выполните команду без флага --volumes
.
Описание .env файла
Репозиторий для скачивания образов установки Teamstorm:
Текущая версия программы:
Ключи доступа к хранилищу прикрепляемых файлов в TeamStorm (minio):
Параметры подключения к RabbitMQ:
RABBITMQ_DEFAULT_HOST=teamstorm_rabbitmq
RABBITMQ_DEFAULT_PASS=password
RABBITMQ_DEFAULT_USER=teamstorm
RABBITMQ_DEFAULT_VHOST=teamstorm
Параметры подключения к БД, при установке внешней БД, поменять на свои значения:
POSTGRES_ATTACHMENT_DB=teamstorm_attachment_db
POSTGRES_COMMENT_DB=teamstorm_comment_db
POSTGRES_WORKFLOW_DB=teamstorm_workflow_db
POSTGRES_WORKITEM_LINK_RULE_DB=teamstorm_linkrule_db
POSTGRES_DB=teamstormdb
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
Для каждой конкретной базы данных значения по умолчанию можно поменять в строке подключения к базе данных:
PG_CONNECTION_STRING="Host=postgres;Port=5432;Database=${POSTGRES_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Pooling=true"
PG_ATTACHMENT_CONNECTION_STRING="Host=attachmnet_service_postgres;Port=5432;Database=${POSTGRES_ATTACHMENT_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};"
PG_COMMENT_CONNECTION_STRING="Host=comment_service_postgres;Port=5432;Database=${POSTGRES_COMMENT_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};"
PG_WORKFLOW_CONNECTION_STRING="Host=workflow_service_postgres;Port=5432;Database=${POSTGRES_WORKFLOW_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};"
PG_WORKITEM_LINK_RULE_CONNECTION_STRING="Host=workitem_link_rule_service_postgres;Port=5432;Database=${POSTGRES_WORKITEM_LINK_RULE_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};"
Pooling=true
Системные параметры, оставить без изменений:
Ended: Архивные версии
Ended: Руководство системного администратора по установке, обновлению и резервному копированию
Руководство администратора TeamStorm по добавлению лицензий и пользователей ↵
Руководство администратора TeamStorm по добавлению лицензий и пользователей
Документ описывает действия администратора по добавлению лицензий, пользователей и присвоению системных ролей. Руководство содержит разделы:
Вход в систему
Первый вход в систему после установки
Вход
При установке в системе создается служебный пользователь с именем admin
и
паролем Qwerty123
. У данного пользователя есть права на изменение настроек
системы.
При первом входе в систему:
-
Выберите вход под локальной учетной записью.
-
Введите данные служебного пользователя (
admin
/Qwerty123
). -
Нажмите Войти или
Enter
.
Смена пароля
После входа в систему рекомендуется сменить пароль. Для этого:
-
Нажмите на иконку профиля и выберите Администрирование в выпадающем меню. По умолчанию откроется раздел Пользователи.
-
Нажмите на пользователя System Administrator. Откроется окно редактирования пользователя.
-
Введите новый пароль в соответствующем поле.
-
Нажмите Сохранить.
Регулярный вход в систему
Для входа в систему:
-
Откройте страницу входа в TeamStorm.
-
Выберите, с помощью какого сервиса вы войдете в систему. Local — локальный пользователь TeamStorm. Дополнительно могут отображаться подключения к LDAP-серверам, например к Active Directory, для авторизации с помощью пользователя AD.
-
Введите учетные данные администратора в поля Имя пользователя и Пароль.
-
Опционально: поставьте флажок Запомнить меня, чтобы не вводить учетные данные при следующем открытии браузера.
-
Нажмите Войти или клавишу
Enter
.
Лицензии
Лицензии позволяют пользователям получать доступ к основной функциональности системы.
Количество лицензий определяет количество ролей Пользователя TeamStorm, которые можно выдать в системе.
В случае если лицензия TeamStorm не активирована или срок ее действия истек, Пользователю TeamStorm будут недоступны:
- создание пространства;
- создание папки;
- создание задачи;
- создание расширения;
- создание спринта;
- создание страницы.
Просмотр ранее созданного содержимого не ограничивается.
Добавление лицензий
Чтобы добавить лицензию, вам потребуется получить ключи лицензий для ваших пользователей и добавить их в ваш аккаунт TeamStorm.
Чтобы получить ключи лицензий:
-
Используя аккаунт администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
-
На экране администрирования выберите раздел Лицензии.
-
Скопируйте идентификатор сервера, нажав значок копирования.
-
Отправьте сообщение на электронный адрес отдела продаж TeamStorm: info@teamstorm.io. При обращении укажите идентификатор сервера в теме письма или в его тексте. Ключи лицензий будут отправлены в ответном сообщении.
Чтобы добавить ключ:
- Откройте раздел Администрирование > Лицензии.
- Нажмите Добавить.
- Скопируйте ключ в соответствующее поле в открывшемся окне и нажмите Добавить.
Просмотр информации о лицензиях
Чтобы просмотреть информацию о лицензиях:
- Используя аккаунт администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
- На экране администрирования выберите раздел Лицензии.
После добавления лицензии на экране отобразится информация о ней, включая:
- ключ лицензии;
- статус (Активирована/Истекла/Неправильный Server ID);
- количество пользователей в рамках данной лицензии;
- срок действия лицензии (обновляется автоматически при добавлении нового ключа и продлении лицензии).
Над таблицей с информацией по лицензиям отображается количество активных пользователей в системе — сумма активных пользователей всех лицензий со статусом Активирована.
Настройка подключений ↵
Настройка подключений
TeamStorm позволяет добавлять пользователей из служебных каталогов и входить в систему с помощью:
Настройка подключений через AD/LDAP
После того, как системный администратор добавил необходимых пользователей в активную директорию (AD), необходимо настроить подключение по LDAP в системе TeamStorm.
-
Используя учетную запись с правами администратора, нажмите на иконку пользователя и перейдите в раздел Администрирование.
-
На верхней панели нажмите Подключения, убедитесь, что вы находитесь на вкладке AD/LDAP, нажмите Создать.
-
Заполните обязательные поля, нажмите Протестировать. В случае успешного тестирования сохраните подключение.
На вкладке AD/LDAP доступно редактирование соединения Active Directory (или LDAP) и кнопка для принудительной синхронизации. Чтение и синхронизация происходят каждые 10 минут.
В настройках AD/LDAP можно указывать схему пользователей и групп для поддержки большинства служб.
Реализована возможность добавлять пользователей только из одной группы в AD.
User Schema: Пример фильтра для пользователей из одной группы:
(&(objectCategory=Person)(sAMAccountName=*)(memberOf=CN=Group-Sonya,OU=Sonya-test,OU=podrazdelenie2,OU=Podrazdelenie1,DC=mtest,DC=ru))
Пример фильтра, который добавляет пользователей из вложенных групп:
(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=CN=Group-Sonya,OU=Sonya-test,OU=podrazdelenie2,OU=Podrazdelenie1,DC=meistertest,DC=ru))
Group Schema: Фильтр для одной группы (имя начинается с ...) :
(&(objectCategory=group)(name=Group-Sonya*))
На странице подключений AD/LDAP можно создать несколько подключений, а также выбрать подключение по умолчанию.
Выбранное подключение по умолчанию будет отображаться на странице авторизации как основное.
Настройка подключений через OpenID Conect
TeamStorm позволяет авторизоваться с помощью сервисов аутентификации Keycloak и Auth0, основанных на протоколе OpenID Connect.
- Используя учетную запись с правами администратора, нажмите на иконку пользователя и перейдите в раздел Администрирование.
- В навигационном меню слева выберите Подключения.
- Перейдите на вкладку OpenID Connect.
- Нажмите Создать.
-
В открывшемся окне:
- введите название подключения, при необходимости можете добавить значок провайдера, для которого настраиваете подключение;
- укажите адрес провайдера, через которого вы настраиваете подключение, в поле Authority;
- в поле Endpoint укажите адрес провайдера с путем до конфигурационного файла OpenID для получения конфигурации OpenID;
- укажите идентификатор приложения провайдера в поле Client_ID;
- укажите секретный ключ приложения в поле Client_secret;
- в поле Scope укажите данные о пользователях, которые необходимо
получить из внешнего провайдера для входа в систему. Минимальный набор
данных:
OpenID
,email
,profile
.
-
Нажмите Сохранить.
- Во внешнем сервисе укажите
callback URL
. Ссылка должна иметь следующий формат:https://{teamstorm_domain}/api/auth/signin-oidc
, где{teamstorm_domain}
замените на адрес вашей системы TeamStorm.
После добавления провайдера OAuth 2.0 на странице логина появится возможность авторизации с помощью него.
Пользователь, который авторизуется с помощью провайдера OAuth 2.0, регистрируется в системе и наделяется системной ролью Пользователь при наличии свободных лицензий.
Ended: Настройка подключений
Управление пользователями и группами ↵
Управление пользователями и группами
В разделе описаны:
Добавление, редактирование и удаление пользователей
Вы можете добавлять, удалять и редактировать данные пользователей, добавленных в систему локально, через Active Directory (AD) или через OpenID Connect. Чтобы открыть окно информации о пользователях:
-
Используя учетную запись с правами администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
-
Перейдите в раздел Пользователи на панели слева.
Добавление пользователей
Вы можете добавлять локальных пользователей в систему TeamStorm:
-
В разделе Пользователи нажмите Добавить.
-
В открывшемся окне укажите:
- Логин пользователя - под этим логином пользователь сможет входить в систему.
- Пароль пользователя.
- Email пользователя.
-
ФИО - указанное имя будет отображаться в системе TeamStorm.
-
Нажмите Добавить.
После добавления новому пользователю присваивается системная роль.
Чтобы назначить системные роли пользователям:
-
Используя учетную запись с правами администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
-
В открывшемся окне перейдите в раздел Системные роли. В разделе отобразятся все пользователи и группы, добавленные в систему.
-
Если нужный пользователь не отображается, начните вводить его имя или логин в поле Добавить пользователя, далее выберите пользователя из результатов поиска.
-
Отметьте чекбокс напротив той роли, которую вы хотите дать определенному пользователю или группе пользователей. Роль применится и сохранится автоматически. При добавлении пользователя через AD/LDAP к группе у которой есть права в системе, синхронизация может занять около 20 минут.
Редактирование данных пользователя
После добавления пользователей вы можете просматривать всю информацию о них в разделе Пользователи. Используйте фильтр для кастомизации отображаемых данных. Настройки отображения сохраняются для текущего браузера.
Чтобы редактировать данные пользователя:
-
Нажмите на строку с именем пользователя, данные которого хотите отредактировать.
-
Внесите изменения.
-
Нажмите Сохранить.
Вы можете менять данные только для локальных пользователей. Данные пользователей, добавленных через AD необходимо менять в AD.
Удаление пользователей
Чтобы удалить локальных пользователей:
-
Поставьте флажок напротив локального пользователя (пользователей), которого хотите удалить из системы.
-
Нажмите Удалить.
Добавление, редактирование и удаление групп
Вы можете объединять пользователей в группы, чтобы добавлять их на созданные проекты и давать им определенные права доступа. Для просмотра информации о группах:
- Используя учетную запись с правами администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
- Выберите Группы на панели навигации слева.
Добавление и редактирование группы
- Нажмите Создать группу.
- Введите название группы и, при необходимости, описание.
- Нажмите Сохранить. Новая группа будет отображаться в списке групп в разделе Локальные группы.
- В списке пользователей справа отметьте чекбоксами тех пользователей, которых вы хотите добавить в созданную группу. При необходимости воспользуйтесь поиском по имени.
- Нажмите значок с изображением стрелки слева от списка пользователей.
Выделенные пользователи добавятся в группу.
Для удаления пользователей из группы:
- Выберите группу, из которой вы хотите удалить пользователей.
- Отметьте чекбоксами тех пользователей, которых вы хотите удалить, в списке в центральной части экрана.
- Нажмите Удалить.
Для редактирования названия и описания группы:
- Выберите группу, которую вы хотите удалить, в разделе Локальные группы.
- Нажмите напротив названия группы и выберите Изменить.
- На открывшей справа панели измените название и описание группы в соответствующих полях и нажмите Сохранить.
Удаление группы
- Выберите группу, которую вы хотите удалить, в разделе Локальные группы.
- Нажмите напротив названия группы и выберите Удалить.
- В открывшемся модальном окне нажмите Да, я хочу удалить группу.
Группа будет удалена.
Ended: Управление пользователями и группами
Системные роли
Ниже описаны роли доступа к Системе в целом.
Роли доступа к пространству и их настройка описаны в Руководстве пользователя в разделе Роли доступа к пространству.
Администратор Core
Роль Администратор Core предназначена для:
- добавления лицензий продукта;
- выдачи системных ролей пользователям и группам пользователей.
После входа в систему пользователя с ролью Администратор Core у него будет автоматически открыт раздел Администрирование.
Роль Администратор Core не списывает лицензию.
Администратор TeamStorm
Роль Администратор TeamStorm предназначена для управления настройками рабочих пространств.
После входа в систему пользователя с ролью Администратор TeamStorm у него будет автоматически открыта Главная страница с доступными для администрирования пространствами без доступа к содержимому этих пространств.
Роль Администратор TeamStorm не требует списания лицензии.
Пользователь TeamStorm
Роль Пользователь TeamStorm предназначена для работы с основной функциональностью системы.
После входа в систему пользователя с ролью Пользователь TeamStorm у него будет автоматически открыта Главная страница с возможностью работы с содержимым пространств, к которым есть доступ.
Подробнее роли доступа к пространствам описаны в Руководстве пользователя.
Роль Пользователь TeamStorm списывает лицензию.
Пользователь TeamStorm + Администратор TeamStorm
При такой комбинации ролей предусмотрено управление настройками рабочих пространств с возможностью работы с содержимым пространств, к которым у пользователя настроен доступ.
Добавление пользователя или группы в список
- Используя учетную запись с правами администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
- В навигационном меню слева выберите Системные роли.
- В разделе Пользователи или Группы в поле ввода начните вводить имя пользователя или группы, которую вы хотите добавить в список.
- Выберите нужного пользователя или группу из раскрывшегося списка.
Пользователь или группа будут добавлены в список для назначения им системных ролей.
Назначение системных ролей пользователям и группам
- Используя учетную запись с правами администратора нажмите на иконку профиля. В открывшемся меню выберите Администрирование.
- В навигационном меню слева выберите Системные роли. В открывшемся окне отобразятся пользователи и группы, добавленные в систему.
- Найдите нужного пользователя или группу и отметьте чекбоксами роли, которые вы хотите им назначить.
Роль применится и сохранится автоматически.
Ended: Руководство администратора TeamStorm по добавлению лицензий и пользователей
Руководство пользователя ↵
Руководство пользователя
Руководство описывает работу пользователей в системе TeamStorm .
Возможны небольшие, не влияющие на работу пользователя расхождения между иллюстрациями настоящего руководства и конкретной реализацией интерфейса системы.
Основные разделы руководства
Вход в систему ↵
Вход в систему
Вход в систему осуществляется через общий для TeamStorm и TestIT сервиc авторизации.
Для учетных записей администратора по умолчанию может быть открыта система TestIT , в этом случае необходимо совершить дополнительный переход в систему TeamStorm .
Для входа в систему:
-
Откройте страницу входа, общую для TeamStorm и TestIT .
-
Выберите локальную учетную запись или вход из домена, если настроены подключения к LDAP-серверам, например к Active Directory, для авторизации с помощью пользователя AD.
-
Опционально: поставьте флажок Запомнить меня, чтобы не вводить учетные данные при следующем открытии браузера.
-
Введите учетные данные пользователя и нажмите Войти.
-
Если по умолчанию открылась система Test IT, то на открывшейся странице нажмите иконку выбора продукта в правом верхнем углу экрана.
-
Выберите TeamStorm .
При входе может быть показан приветственный видеоролик.
Ended: Вход в систему
Главная страница ↵
Главная страница
В результате успешного входа в систему откроется Главная страница.
На Главной странице отображается:
- приветствие с указанием имени пользователя;
- количество и список доступных пользователю пространств;
- количество и список пришедших пользователю уведомлений;
- количество и список избранных страниц;
- количество и список назначенных пользователю задач.
В верхней части Главной страницы находятся:
- поле ввода для полнотекстового поиска;
- индикатор уведомлений;
- иконка меню информации о продукте;
- кнопка перехода к профилю пользователя.
Для перехода на главную страницу с других страниц нажмите надпись Главная или TeamStorm в левом верхнем углу экрана.
Закрепление пространств на Главной странице
На Главной странице можно закреплять пространства в списке доступных пользователю пространств.
Закрепленные пространства всегда отображаются в верхней части списка.
Для закрепления пространства нажмите кнопку справа от названия пространства в списке.
Для открепления пространства еще раз нажмите ту же кнопку.
Меню информации о продукте
Меню состоит из разделов:
-
Документация;
-
О продукте.
Для вызова меню нажмите кнопку в правой верхней части экрана.
При выборе раздела Документация откроется страница с документами на систему TeamStorm .
При выборе раздела О продукте откроется окно, где указаны:
- название продукта;
- версия продукта;
- ветка версии;
- хеш коммита.
Ended: Главная страница
Мои задачи и списания
Раздел Мои задачи предназначен для того, чтобы пользователи могли видеть все задачи в едином списке и управлять своими задачами и списаниями трудозатрат из него.
Раздел состоит из подразделов:
- Мои задачи;
- Доступные задачи;
- Доступные страницы;
- Мои заявки;
- Списания.
Для перехода в раздел нажмите Мои задачи в левом верхнем углу экрана или нажмите кнопку Все мои задачи в левой верхней части списка задач на Главной странице.
Мои задачи
Подраздел Мои задачи представляет собой таблицу со столбцами:
- Название;
- ID;
- Дата выполнения;
- Ответственный;
- Статус.
В правой верхней части указано общее количество назначенных на пользователя в настоящий момент задач.
В левой верхней части расположено поле поиска по разделу. Поиск осуществляется по названию или идентификатору задачи.
Ячейки таблицы активны и позволяют открывать карточку задачи (для столбцов Название и ID) или менять указанный в столбце атрибут (остальные столбцы) непосредственно из подраздела Мои задачи.
Для перехода в подраздел нажмите Мои задачи в левой верхней части экрана над списком задач.
Доступные задачи
Подраздел Доступные задачи позволяет видеть все задачи, которыми с вами поделились. Такие задачи находятся в пространствах, к которым у пользователя нет доступа, поэтому перейти в них можно только по ссылке.
Подраздел позволяет собрать все подобные задачи в едином представлении.
Подраздел Доступные задачи представляет собой таблицу со столбцами:
- Название (также отображается тип задачи);
- ID;
- Статус;
- Дата создания;
- Ответственный;
- Поделился (пользователь, который поделился задачей).
В таблице доступен поиск по названию или идентификатору задачи. В правой верхней части указано общее количество задач, которыми с вами поделились.
Ячейки таблицы активны и позволяют открывать карточку задачи (для столбцов Название и ID) или менять указанный в столбце атрибут непосредственно из подраздела.
Доступные страницы
Подраздел Доступные страницы позволяет видеть все страницы, которыми с вами поделились. Такие страницы находятся в пространствах, к которым у пользователя нет доступа, поэтому перейти на них можно только по ссылке.
Подраздел Доступные страницы представляет собой таблицу со столбцами:
- Название;
- Дата создания;
- Поделился (пользователь, который поделился страницей).
В таблице доступен поиск по названию страницы. В правой верхней части указано общее количество страниц, которыми с вами поделились.
Из таблицы можно открыть страницу в новой вкладке в режиме чтения.
Мои заявки
Подраздел Мои заявки позволяет видеть все созданные вами задачи по заявкам и отслеживать статус их выполнения, а также видеть историю заявок.
Подраздел представляет собой таблицу со столбцами:
- Название (также отображается тип заявки);
- ID;
- Статус;
- Дата создания;
- Дата выполнения;
- Ответственный.
В таблице доступна фильтрация задач по типу заявки и поиск задачи по названию или ID.
Списания
Подраздел Списания позволяет видеть все свои списания трудозатрат в едином списке и управлять списаниями из него.
Разрешение на работу со своими списаниями выдается на уровне администратора рабочего пространства. Если разрешений нет, то подраздел пользователю не отображается.
По умолчанию в подразделе в табличном виде отображаются только те задачи, по которым у пользователя уже были списания.
В таблице по умолчанию представлены задачи текущей недели. Для выбора другой недели на временной шкале воспользуйтесь кнопками навигации < > в правой верхней части экрана/
Для возврата к текущей неделе нажмите кнопку Текущая неделя.
Из списка можно открывать карточку задачи, нажав ее название.
Добавление задачи в список
- Нажмите кнопку + Добавить задачу в правой верхней части экрана.
- В открывшемся окне начните вводить часть названия или идентификатор задачи в поле ввода.
- Выберите нужную задачу из раскрывшегося списка.
Добавление списания
- В таблице списаний нажмите на пустую или заполненную ячейку, соответствующую той задаче и тому дню, для которых вы хотите добавить списание.
- В открывшемся окне введите количество затраченного времени в часах и комментарий к списанию (опционально).
- Нажмите кнопку +. Убедитесь, что списание и комментарий отобразились под полями ввода.
- Закройте окно, нажав ✖ в правом верхнем углу.
Списание будет добавлено и сумма трудозатрат динамически изменится в соответствующей ячейке таблицы.
Редактирование списания
- В таблице списаний нажмите на заполненную ячейку, соответствующую той задаче и тому дню, для которых вы хотите отредактировать списание.
- В открывшемся окне найдите списание, которое вы хотите отредактировать.
- Измените значение затраченного времени или текст комментария в соответствующих полях.
- Закройте окно, нажав ✖ в правом верхнем углу.
Удаление списания
- В таблице списаний нажмите на заполненную ячейку, соответствующую той задаче и тому дню, списание в которых вы хотите удалить.
- В открывшемся окне найдите списание, которое вы хотите удалить.
- Нажмите кнопку и выберите Удалить.
- Убедитесь в том, что списание удалено из списка и закройте окно.
Дашборды ↵
Дашборды
Дашборды позволяют пользователю организовывать свое рабочее пространство, отслеживать производительность, управлять проектами и выполнением задач.
Дашборд представляет собой информационную панель, на которой важная для пользователя аналитика представлена в форме динамически изменяющихся блоков — виджетов.
Дашборд может состоять из одного или нескольких виджетов.
Работа с дашбордами описана в подразделах:
Создание, настройка и удаление дашборда
Создание дашборда
- Нажмите Дашборды в левой верхней части экрана.
- На экране дашбордов нажмите Дашборд в правой верхней части.
- В открывшемся окне введите название нового дашборда и нажмите Создать.
Дашборд будет создан и отобразится в списке на экране дашбордов.
Дашборды из списка можно сортировать по названию или дате создания, а также искать при помощи поиска по названию.
Кроме того, создать новый дашборд можно с помощью копирования.
Добавление виджетов в дашборд
- Нажмите на название нужного дашборда в списке на экране дашбордов. При необходимости воспользуйтесь поиском или сортировкой.
- Если дашборд не содержит виджетов, то на открывшемся экране приветствия нажмите на название нужного виджета.
- Если дашборд уже содержит виджеты, нажмите Виджет в правой верхней части основного экрана и в открывшемся окне нажмите на название нужного виджета. При необходимости воспользуйтесь поиском по названию.
- Введите или измените по своему усмотрению название нового виджета.
- Примените другие настройки (настройки расположения, фильтрация по пользователям и т.д.), если виджет их предполагает.
- Нажмите Добавить.
Виджет будет добавлен и отобразится на основном экране дашборда.
Перемещение виджета на дашборде
- Захватите левой кнопкой мыши специальное поле рядом с названием виджета.
- Не отпуская кнопки, перемещайте виджет по дашборду до желаемого места.
- Отпустите кнопку.
Виджет будет перемещен в нужное место на дашборде.
Удаление виджета из дашборда
- Нажмите на название нужного дашборда в списке на экране дашбордов. При необходимости воспользуйтесь поиском или сортировкой.
- Нажмите в правом верхнем углу виджета, который вы хотите удалить.
- Выберите Удалить.
- В открывшемся окне нажмите Да, я хочу удалить виджет.
Виджет будет удален из дашборда.
Переименование дашборда
- Нажмите на название нужного дашборда в списке на экране дашбордов. При необходимости воспользуйтесь поиском или сортировкой.
- Нажмите в правом верхнем углу экрана и выберите Переименовать.
- В отрывшемся модальном окне введите новое название дашборда и нажмите Сохранить.
Удаление дашборда
- Нажмите на название нужного дашборда в списке на экране дашбордов. При необходимости воспользуйтесь поиском или сортировкой.
- Нажмите в правом верхнем углу экрана и выберите Удалить.
- В отрывшемся модальном окне нажмите Да, я хочу удалить дашборд.
Дашборд будет удален вместе со всеми виджетами.
Копирование дашборда
TeamStorm позволяет создавать новый дашборд, скопировав один из существующих.
При копировании сохраняются все виджеты, настройки и данные, кроме настроек функции Поделиться дашбордом.
Для того, чтобы скопировать дашборд:
- Перейдите в раздел Дашборды.
- Нажмите в строке с нужным дашбордом и выберите Сделать копию.
- В открывшемся модальном окне введите название нового дашборда. По умолчанию название будет иметь вид Копия <название копируемого дашборда>.
- Нажмите Сохранить.
Дашборд будет скопирован и отобразится в списке в разделе Дашборды.
Виджеты ↵
Виджеты
Виджеты — это динамически изменяющиеся блоки, представляющие аналитическую информацию по какой-либо теме, связанной с управлением проектом или задачами.
В настоящее время в системе реализованы виджеты:
Мои задачи
Виджет Мои задачи представляет собой таблицу со столбцами:
- Название;
- ID;
- Дата выполнения;
- Ответственный;
- Статус.
В правой верхней части виджета расположены:
- информация о количестве назначенных на пользователя задач;
- кнопка обновления данных;
- кнопка настройки виджета:
- кнопка, вызывающая меню управления виджетом.
В левой верхней части расположено поле поиска по виджету. Поиск осуществляется по названию или идентификатору задачи.
Ячейки таблицы активны и позволяют открывать карточку задачи (для столбцов Название и ID) или менять указанный в столбце атрибут непосредственно из виджета (для остальных столбцов).
Настройка виджета
В виджете Мои задачи из настроек доступно только изменение названия:
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся модальном окне введите новое название.
- Нажмите Сохранить.
Учет трудозатрат
Виджет Учет трудозатрат предназначен для ведения учета трудозатрат.
Виджет Учет трудозатрат используется пользователем с функциями менеджера для того, чтобы просматривать списания трудозатрат другими пользователями.
Виджет Учет трудозатрат по умолчанию доступен администратору пространства. Другим пользователям при необходимости можно выдать соответствующее разрешение (Просмотр списаний по всем задачам), создав отдельную пользовательскую роль доступа.
В виджете представлен агрегированный учет трудозатрат пользователей во всех пространствах, где менеджер является администратором или имеет соответствующее разрешение.
Трудозатраты приведены в виде таблицы со списком задач и списаниям трудозатрат по ним в определенные дни. В таблице возможно отображение несколько групп списаний по одной и той же задаче. Строки таблицы отсортированы по дате создания задачи (новые сверху). Если по задаче есть несколько строк со списаниями, то внутри группы они сортируется по списавшим трудозатраты пользователям в алфавитном порядке.
Дополнительно в таблице отображается колонка с суммой списанных часов в строке за отображаемые две недели.
Доступно открытие карточек задач, которые представлены в таблице.
В правой верхней части виджета расположены:
- информация о количестве назначенных на пользователя задач;
- кнопка обновления данных;
- кнопка настройки виджета:
- кнопка, вызывающая меню управления виджетом.
Добавление виджета
- Перейдите к добавлению виджета и выберите Запрос.
- В открывшемся окне:
- введите название нового виджета;
- выберите из выпадающего списка пространства из которых будет формироваться отчет или оставьте фильтр пустым;
- выберите пользователей или группы, данные по которым вы хотите видеть в отчете.
- Нажмите Добавить.
Список пользователей и групп состоит из всех пользователей и групп, имеющих системную роль Пользователь TeamStorm.
Если выбраны определенные пространства, то в списке доступны, только группы, добавленные в эти пространства.
Навигация по таблице
По умолчанию отображается информация за две недели, при это текущий день недели выделяется цветом.
Для перемещения по шкале времени используйте кнопки навигации <
>
в правом верхнем углу над таблицей.
Для возврата к текущей неделе нажмите кнопку Текущая неделя.
Настройка виджета
Пользователь может изменять название виджета. Для того, чтобы изменить название:
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся окне внесите необходимые изменения.
- Нажмите Сохранить.
В виджете Учет трудозатрат доступна фильтрация данных данных по:
- пространству;
- пользователю.
Для фильтрации по пространству:
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся модальном окне нажмите Пространство .
- Отметьте в списке одно или несколько пространств, по которым вы хотите получить данные.
- При необходимости очистить фильтры, нажмите Очистить в нижней части меню со списком пространств.
- Нажмите Сохранить.
Для фильтрации по пользователю:
- Нажмите кнопку в правой верхней части виджета
- В открывшемся модальном окне нажмите Пользователь или группа .
- Отметьте в списке пользователей или группы, по которым вы хотите получить данные.
- При необходимости очистить фильтры, нажмите Очистить в нижней части меню со списком пользователей.
- Нажмите Сохранить.
Группировка списаний
TeamStorm позволяет группировать списания по трудозатратам в виджете Учет трудозатрат.
Группировка по разным параметрам улучшает возможности для анализа трудозатрат.
Для того, чтобы сгруппировать списания:
- Перейдите в виджет Учет трудозатрат.
- Нажмите кнопку Настроить в правой верхней части виджета.
- Нажмите Группировать.
- Выберите параметр для группировки из раскрывающегося списка:
- по задаче;
- по пользователю;
- по элементу портфеля;
- по тегу.
- Выберите атрибут из раскрывающегося списка (для группировки по тегу).
- Нажмите Сохранить.
При группировке по задаче из отчета можно скрывать имена пользователей, списавших трудозатраты, чтобы сконцентрировать внимание на общем времени, списанном на выполнение задачи.
При группировке по пользователю из отчета можно скрывать названия задач, на которые списано время, чтобы сконцентрировать внимание на том, сколько времени в сумме списал тот или иной пользователь.
При группировке по элементу портфеля не отображаются имена пользователей, списавших трудозатраты и вы можете скрыть названия задач, чтобы сконцентрировать внимание на том, сколько времени списано в том или ином элементе портфеля.
Для того, чтобы отменить группировку, в списке выберите Без группировки и нажмите Сохранить.
При группировке по тегу не отображаются имена пользователей, списавших трудозатраты и вы можете скрыть названия задач, чтобы сконцентрировать внимание на том, сколько времени списано по задачам с тем или иным тегом.
Отдельно при группировке по тегу выделяются:
- задачи, у которых есть атрибут типа "Тег", но он не заполнен;
- задачи, у которых нет атрибута выбранного типа.
Запрос
Виджет Запрос представляет собой отображение ранее созданного в системе запроса на дашборде.
Виджет представляет собой таблицу со столбцами, которые соответствуют выбранным при создании запроса фильтрам.
Столбцы можно добавлять или удалять при настройке виджета.
Добавление виджета
- Перейдите к добавлению виджета и выберите Запрос.
- В открывшемся окне выберите запрос из выпадающего списка.
- Нажмите Добавить.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся модальном окне совершите нужные вам изменения:
- выберите новый запрос;
- измените название запроса;
- добавьте или удалите столбцы для отображения.
- Нажмите Сохранить.
Список задач
Виджет Список задач представляет собой запрос, с помощью которого можно собирать и отфильтровывать задачи из нескольких пространств и находящихся в них папок.
Столбцы, которые будут отображаться в запросе, можно выбирать во время создания или настройки списка.
Данные из списка задач можно выгружать в формат CSV.
Создание списка задач
- Перейдите к добавлению виджета и выберите Список задач.
- В открывшемся окне:
- введите название нового списка;
- выберите расположения, из которых будут взяты задачи для формирования списка;
- нажмите в блоке Фильтрация и выберите фильтры, чтобы выбрать задачи по определенным критериям. При необходимости создайте сложный фильтр;
- выберите колонки, которые будут отображаться в списке.
- Нажмите Добавить.
Расположения в окне создания списка представлены в виде древовидной структуры, в которой первый уровень — пространства, второй и последующие — папки, спринты, запросы и другие расположения. Для того, чтобы раскрыть вложенные уровни, воспользуйтесь кнопками и
Примечание
Если пользователю недоступно хотя бы одно пространство, выбранное для построения запроса, то в виджете отобразится сообщение Не удалось получить список задач для этого виджета.
Фильтры для списка задач настраиваются так же, как фильтры в представлениях, включая фильтры по типу связи.
При необходимости отфильтровать задачи в уже созданном списке перейдите к Настройке виджета.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся модальном окне внесите необходимые изменения как указано в подразделе Создание списка задач.
- Нажмите Сохранить.
Счетчик
Виджет Счетчик отображает количество задач в пространственном или глобальном запросе.
Добавление счетчика
Добавление счетчика для существующего запроса
- Перейдите к добавлению виджета и выберите виджет Счетчик.
- В открывшемся окне по умолчанию будет открыта вкладка Выбор существующего запроса. На вкладке:
- введите название нового счетчика (по умолчанию — Счетчик);
- выберите из списка запрос, счетчик для которого вы хотите добавить;
- Нажмите Добавить.
Счетчик будет добавлен на дашборд. На виджете отображается количество задач для выбранного запроса и инструменты управления виджетом.
Добавление счетчика для нового запроса
- Перейдите к добавлению виджета и выберите виджет Счетчик.
- В открывшемся окне переключитесь на вкладку Новый запрос. На вкладке:
- введите название нового счетчика (по умолчанию — Счетчик);
- выберите расположения, из которых будет формироваться запрос;
- нажмите в блоке Фильтрация и выберите фильтры по системным или пользовательским атрибутам.
- Нажмите Добавить.
Подробнее о формировании глобальных запросов см. раздел Список задач.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся окне внесите необходимые изменения как указано в подразделе Добавление счетчика.
- Нажмите Сохранить.
Примечание
Наборы настроек при редактировании счетчиков для существующих и для новых запросов различаются.
Создано и выполнено
Виджет Создано и выполнено позволяет отображать динамику созданных и выполненных задач за определенные промежутки времени.
Таким образом пользователь может анализировать рабочую нагрузку и выполнение поставленных планов.
Создание виджета
Создание виджета для существующего запроса
- Перейдите к добавлению виджета и выберите виджет Создано и выполнено.
- В открывшемся окне по умолчанию будет открыта вкладка Выбор существующего запроса. На вкладке:
- введите название нового виджета (по умолчанию — Создано и выполнено);
- выберите из списка запрос, виджет для которого вы хотите добавить;
- выберите период для отображения на виджете;
- выберите временной шаг для шкалы времени.
- Нажмите Добавить.
На дашборд будет добавлен виджет с диаграммой, отражающей соотношение созданных задач к выполненным в выбранном запросе.
Создание виджета для нового запроса
- Перейдите к добавлению виджета и выберите виджет Создано и выполнено.
- В открывшемся окне переключитесь на вкладку Новый запрос. На вкладке:
- введите название нового виджета (по умолчанию — Создано и выполнено);
- выберите расположения, из которых будет формироваться запрос;
- нажмите в блоке Фильтрация и выберите фильтры по системным или пользовательским атрибутам;
- выберите период для отображения на виджете;
- выберите временной шаг для шкалы времени.
- Нажмите Добавить.
На дашборд будет добавлен виджет с диаграммой, отражающей соотношение созданных задач к выполненным для выбранной области данных и указанного периода.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся окне внесите необходимые изменения как указано в подразделе Создание виджета.
- Нажмите Сохранить.
Примечание
Наборы настроек при редактировании виджетов для существующих и для новых запросов различаются.
Круговая диаграмма
Виджет Круговая диаграмма в графической форме отображает состояние определенной совокупности задач.
Круговую диаграмму можно формировать по различным параметрам и группировать по атрибутам.
Параметры для формирования круговой диаграммы:
- Количество задач;
- Сумма оценок в часах;
- Сумма затраченного времени в часах;
- Сумма оценок в сторипоинтах.
Атрибуты для группировки круговой диаграммы:
- Тип;
- Статус;
- Ответственный;
- Автор;
- Автор изменения.
Создание круговой диаграммы
Создание круговой диаграммы для существующего запроса
- Перейдите к добавлению виджета и выберите виджет Круговая диаграмма.
- В открывшемся окне по умолчанию будет открыта вкладка Выбор существующего запроса. На вкладке:
- введите название новой диаграммы (по умолчанию — Круговая диаграмма);
- выберите из списка запрос, диаграмму для которого вы хотите добавить;
- выберите параметр, по которому будет формироваться диаграмма;
- выберите параметр, по которому будут сгруппированы показатели на диаграмме;
- выберите представление для отображения показателя — в абсолютных числах или в процентах.
- Нажмите Добавить.
На дашборд будет добавлена круговая диаграмма, отражающая аналитические данные по задачам для выбранного запроса.
Пример
Круговая диаграмма, сформированная по параметру Количество задач
и сгруппированная по типу задачи.
Данные отображаются в абсолютных числах.
Создание круговой диаграммы для нового запроса
- Перейдите к добавлению виджета и выберите виджет Круговая диаграмма.
- В открывшемся окне переключитесь на вкладку Новый запрос. На вкладке:
- введите название нового виджета (по умолчанию — Круговая диаграмма);
- выберите расположения, из которых будет формироваться запрос;
- нажмите в блоке Фильтрация и выберите фильтры по системным или пользовательским атрибутам;
- выберите параметр, по которому будет формироваться диаграмма;
- выберите параметр, по которому будут сгруппированы показатели на диаграмме;
- выберите представление для отображения показателя — в абсолютных числах или в процентах.
- Нажмите Добавить.
На дашборд будет добавлена круговая диаграмма, отражающая данные по задачам для созданного при помощи выбора расположений и фильтров запроса.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся окне внесите необходимые изменения как указано в подразделе Создание виджета.
- Нажмите Сохранить.
Примечание
Наборы настроек при редактировании виджетов для существующих и для новых запросов различаются.
Столбчатая диаграмма
Виджет Столбчатая диаграмма в графической форме отображает состояние определенной совокупности задач.
Столбчатую диаграмму можно формировать по различным параметрам, распределять и группировать по атрибутам.
На столбчатой диаграмме по оси Y располагаются параметры, а по оси Y — атрибуты для распределения.
Параметры для формирования столбчатой диаграммы:
- Количество задач;
- Сумма оценок в часах;
- Сумма затраченного времени в часах;
- Сумма оценок в сторипоинтах;
- Пользовательские параметры, созданные в системе.
Атрибуты для распределения:
- Дата начала;
- Дата выполнения;
- Дата завершения;
- Дата изменения;
- Дата создания;
- Тип;
- Статус;
- Ответственный;
- Автор;
- Автор изменения;
- Пользовательские атрибуты, созданные в системе.
Атрибуты для группировки круговой диаграммы:
- Тип;
- Статус;
- Ответственный;
- Автор;
- Автор изменения.
Создание столбчатой диаграммы
Создание столбчатой диаграммы для существующего запроса
- Перейдите к добавлению виджета и выберите виджет Столбчатая диаграмма.
- В открывшемся окне по умолчанию будет открыта вкладка Выбор существующего запроса. На вкладке:
- введите название новой диаграммы (по умолчанию — Столбчатая диаграмма);
- выберите из списка запрос, диаграмму для которого вы хотите добавить;
- выберите параметр, по которому будет формироваться диаграмма;
- выберите атрибут для распределения. При выборе атрибута типа Дата на форме отобразятся поля для выбора периода и временного шага;
- выберите период, данные по которому вы хотите получить (при выборе распределения по атрибуту типа Дата);
- выберите временной шаг: день, неделя, месяц, год (при выборе распределения по атрибуту типа Дата);
- выберите параметр, по которому будут сгруппированы показатели на диаграмме;
- выберите тип сортировки данных: от большего к меньшему или от меньшего к большему; (для любых распределений, кроме распределений по атрибуту типа Дата).
- Нажмите Добавить.
На дашборд будет добавлена столбчатая диаграмма, отражающая аналитические данные по задачам для выбранного запроса.
Пример
Столбчатая диаграмма, сформированная по параметру Количество задач с распределением по дате начала, за период равный прошедшим тридцати дням с временным шагом один день и группировкой по ответственному. Фокус на столбце за 6 октября. В легенде показывается количество задач, ответственный, дата начала.
Создание столбчатой диаграммы для нового запроса
- Перейдите к добавлению виджета и выберите виджет Столбчатая диаграмма.
- В открывшемся окне переключитесь на вкладку Новый запрос. На вкладке:
- введите название нового виджета (по умолчанию — Столбчатая диаграмма);
- выберите расположения, из которых будет формироваться запрос;
- нажмите в блоке Фильтрация и выберите фильтры по атрибутам;
- выберите параметр, по которому будет формироваться диаграмма;
- выберите атрибут для распределения. При выборе атрибута типа Дата на форме отобразятся поля для выбора периода и временного шага;
- выберите период, данные по которому вы хотите получить (при выборе распределения по атрибуту типа Дата);
- выберите временной шаг: день, неделя, месяц, год (при выборе распределения по атрибуту типа Дата);
- выберите параметр, по которому будут сгруппированы показатели на диаграмме;
- выберите тип сортировки данных: от большего к меньшему или от меньшего к большему; (для любых распределений, кроме распределений по атрибуту типа Дата).
- Нажмите Добавить.
На дашборд будет добавлена столбчатая диаграмма, отражающая данные по задачам для созданного при помощи выбора расположений и фильтров запроса.
При фокусе на элементе диаграммы в легенде дополнительно указывается расположение (пространство), из которого сформирован элемент.
Настройка виджета
- Нажмите кнопку в правой верхней части виджета.
- В открывшемся окне внесите необходимые изменения как указано в подразделе Создание виджета.
- Нажмите Сохранить.
Примечание
Наборы настроек при редактировании виджетов для существующих и для новых запросов различаются.
Ended: Виджеты
Ended: Дашборды
Заявки ↵
Заявки
Заявки позволяют пользователям создавать задачи в тех пространствах, к которым у них нет доступа.
Заявки можно создавать как по прямой ссылке, например, присланной в личном сообщении, так и из раздела Заявки.
Созданные по типу заявки задачи доступны для тех пользователей, которые их создали.
Подробнее о заявках:
Создание и настройка типа заявки
Для создания и настройки типа заявки необходимо иметь разрешение Управление типами заявок. По умолчанию разрешение включено для администратора пространства, в котором будут создаваться заявки.
Создание типа заявки
- Перейдите в пространство, для которого вы хотите создать типы заявок.
- Нажмите напротив названия пространства в панели навигации и выберите Настройки.
- Нажмите Типы заявок на панели слева.
- Нажмите Добавить тип заявки в правой верхней части экрана Типы заявок.
- На открывшейся справа панели заполните поля:
- Название — название типа заявки, обязательное поле;
- Описание — краткое описание типа заявки, которое будет отображаться в разделе Заявки пользователю, который будет создавать заявку;
- Тип создаваемой задачи — выберите тип создаваемой задачи из раскрывающегося списка, который содержит те типы задач, которые присутствуют в данном пространстве.
- Папка для созданных задач — выберите папку для задач, создаваемых по типу заявки, из раскрывающегося списка, который содержит названия всех папок,созданных в данном пространстве.
- Нажмите Сохранить.
Тип заявки будет создан и отображен в списке на экране Типы заявок.
После создания тип заявки не активирован.
Редактирование типа заявки
- Перейдите в пространство, типы заявок для которого вы хотите отредактировать.
- Нажмите напротив названия пространства в панели навигации и выберите Настройки.
- Нажмите Типы заявок на панели слева.
- Нажмите на название типа заявки в списке на экране Типы заявок.
- На открывшейся справа панели измените значения в полях:
- Название — название типа заявки, обязательное поле;
- Описание — краткое описание типа заявки, которое будет отображаться в разделе Заявки пользователю, который будет создавать заявку;
- Тип создаваемой задачи — выберите тип создаваемой задачи из раскрывающегося списка, который содержит все типы задач, ранее созданные в данном пространстве.
- Папка для созданных задач — выберите папку для задач, создаваемых по типу заявки, из раскрывающегося списка, который содержит названия всех папок, созданных в данном пространстве.
- Нажмите Сохранить.
Тип заявки будет сохранен с новыми параметрами.
Активация и деактивация типа заявки
- Перейдите на экран Типы заявок в настройках пространства.
- Выберите тип заявки, который вы хотите активировать или деактивировать.
- В столбце Активно переведите ползунок в активное (подсвечивается синим ветом) или неактивное (сохраняет серый цвет) положение.
Активированные типы заявок отображаются пользователям в разделе Заявки.
Удаление типа заявки
- Перейдите на экран Типы заявок в настройках пространства.
- Нажмите кнопку удаления напротив названия того типа заявки, который вы хотите удалить.
- В открывшемся модальном окне нажмите Да, я хочу удалить тип заявки.
Тип заявки будет удален. Пользователи, переходящие по ссылке на удаленный тип заявки увидят экран с сообщением 404 Такой страницы не существует
.
ВНИМАНИЕ
При удалении типа задачи, использующегося в типе заявки, пользователю отображается уведомление о том, что будет удален тип заявки. Пользователь должен подтвердить действие. Существующие задачи по заявкам этого типа теряют признак типа.
Создание ссылки на тип заявки
- Перейдите на экран Типы заявок в настройках пространства.
- Нажмите кнопку Скопировать ссылку напротив названия того типа заявки, для которого вы хотите создать ссылку.
Ссылка будет скопирована в буфер обмена. Пользователю будет отображено сообщение Ссылка на тип заявки скопирована.
Ссылку можно отправить другому пользователю для того, чтобы тот мог создать заявку в соответствующем пространстве по прямой ссылке.
Создание заявки
Для создания заявки необходимо иметь права Пользователя TeamStorm. Пользователи могут создавать заявки из раздела Заявки или по прямой ссылке.
Создание из раздела Заявки
- Нажмите Заявки в левой верхней части экрана.
- В открывшемся разделе Заявки нажмите на нужный тип заявки в списке. При необходимости воспользуйтесь полем поиска для того, чтобы найти тип.
- В открывшемся модальном окне введите описание заявки. Описание заявки будет отображено в блоке Описание той задачи, которая будет создана из заявки.
- Заполните атрибуты заявки (опционально). Атрибуты заявки будут соответствовать атрибутам той задачи, которая будет создана из заявки.
- Раскройте раздел Связанные задачи, затем нажмите + Связанная задача добавьте связанную задачу, не забыв установить тип связи и нажмите (опционально).
- Раскройте раздел Связанные страницы, затем нажмите + Связанная страница добавьте связанную страницу и нажмите (опционально).
- Раскройте раздел Вложения и добавьте файлы вложений (опционально). Файлы вложений будут приложены к той задаче, которая будет создана из заявки.
- Нажмите Отправить.
Из заявки будет создана задача в том простраснстве, в котором был создан соответствующий тип заявки.
На экране отобразится всплывающее сообщение вида Создана задача <идентификатор задачи> по заявке.
Пользователю, создавшему заявку, будет отправлено уведомление о создании задачи по заявке.
Создание заявки по ссылке
- Откройте отправленную вам другим пользователем ссылку на создание заявки.
- Следуйте указаниям из подраздела Создание из раздела Заявки.
Если тип заявки, для которого была создана ссылка, был удален или деактивирован, по ссылке откроется страница с сообщением 404 Такой страницы не существует
.
В этом случае обратитесь к пользователю, приславшему ссылку или администратору TeamStorm.
Переход к задаче, созданной из заявки
Откройте уведомления и нажмите на уведомление о создании нужной вам задачи или воспользуйтесь поиском на Главной странице.
Ended: Заявки
Скриптовая автоматизация ↵
Скриптовая автоматизация
TeamStorm позволяет автоматизировать рутинные действия при помощи скриптов.
Скрипт запускается и выполняет заложенные в нем операции автоматически при наступлении заранее заданного в правиле автоматизации события (триггера).
На каждый тип события можно создать несколько скриптов. Автоматизации по событию выполняются в порядке создания автоматизаций.
правила скриптовой автоматизации привязываются к определенному пространству или действуют для всех пространств в системе.
Создание правил скриптовой автоматизации доступно пользователям с ролью Администратор TeamStorm.
Подробнее о скриптах в подразделах:
Управление скриптами
Создание скрипта
- Войдите в TeamStorm под учетной записью с ролью Администратор TeamStorm.
- Откройте вкладку Автоматизация в верхней части экрана.
- Нажмите кнопку Учетная запись в правой верхней части экрана.
- Введите токен учетной записи, от имени которой будет выполняться автоматизация.
- Нажмите кнопку Скрипт в правой верхней части экрана.
- На открывшемся экране:
- введите название скрипта;
- выберите пространство, в котором будет выполняться скрипт.
- выберите тип события, при наступлении которого будет выполняться скрипт.
- Введите скрипт в консоли. Для вашего удобства вы можете выбрать светлую или темную тему консоли при помощи кнопки с изображением палитры справа над консолью.
- Нажмите Проверить справа над консолью. Убедитесь в том, что скрипт прошел проверку и на экране отобразилось уведомление об этом.
- Нажмите Создать.
Скрипт будет создан. Под созданным скриптом будет отображен журнал с результатами выполнения скрипта
Для просмотра списка созданных правил еще раз нажмите на вкладку Автоматизация в верхней части экрана.
Активация и деактивация скрипта
- Войдите в TeamStorm под учетной записью с ролью Администратор TeamStorm.
- Откройте вкладку Автоматизация в верхней части экрана.
- Найдите в таблице нужный скрипт и переведите переключатель в столбце Активен в активное или неактивное положение.
Удаление скрипта
- Войдите в TeamStorm под учетной записью с ролью Администратор TeamStorm.
- Откройте вкладку Автоматизация в верхней части экрана.
- Найдите в таблице нужный скрипт и нажмите кнопку удаления напротив нужного скрипта.
- В открывшемся модальном окне нажмите Да, я хочу удалить скрипт.
Скрипт будет удален вместе с относящимися к нему журналами.
Описание скриптовой автоматизации
Скрипт — это набор инструкций на C#, которые составляют тело скрытого внутреннего метода, затем компилируемого и выполняемого по триггерам.
Технически скрипты транслируются на внутренний промежуточный язык .NET - CIL.
Скрипты вызываются событиями в системе. На одно событие в рамках пространства может быть создано несколько автоматизаций.
Контекст событий
Каждое событие имеет свой контекст - набор данных, связанный с ним. Контексты для разных событий отличаются.
Контекст передаётся в память выполняющегося скрипта в виде типизированного объекта. Доступ к контексту осуществляется через переменную e
.
Контекст создания задачи
Когда триггером автоматизации является событие Создание задачи, передаются следующие данные события:
public class WorkitemCreatedEventContext : BaseWorkitemEventContext
{
public Guid WorkitemId { get; init; } // Идентификатор созданной задачи
public string WorkitemKey { get; init; } // Ключ созданной задачи
public string WorkitemName { get; init; } // Название созданной задачи
public required string? WorkitemDescription { get; set; } // Описание созданной задачи
public Guid? WorkitemAssigneeId { get; init; } // Идентификатор ответсвенного на задаче
public Guid WorkitemTypeId { get; init; } // Идентификатор типа задачи
public required DateTime WorkitemCreationDate { get; set; } // Дата создания задачи
public required Guid? WorkitemWorkflowId { get; init; } // Идентификатор рабочего процесса задачи
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст событий изменения задачи
Событиями изменения задачи являются:
- Изменение родительской задачи или папки;
- Изменение типа задачи;
- Изменение процесса;
- Изменение статуса;
- Изменение имени;
- Изменение описания;
- Изменение ответственного;
- Изменение даты начала;
- Изменение даты выполнения;
- Изменение оценки в часах;
- Изменение оценки в сторипоинтах;
- Изменение спринта;
- Изменение значения прогресса;
- Изменение пользовательского атрибута.
Для этих событий передаются следующие данные контекста:
public class WorkitemUpdatedEventContext : BaseWorkitemEventContext
{
public object? OldValue { get; init; } // Значение параметра до изменения
public object? NewValue { get; init; } // Значение параметра после изменения
public Guid WorkitemId { get; init; } // Идентификатор задачи
public string WorkitemKey { get; init; } // Ключ задачи
public string WorkitemName { get; init; } // Название задачи
public required string? WorkitemDescription { get; set; } // Описание задачи
public Guid? WorkitemAssigneeId { get; init; } // Идентификатор ответственного на задаче
public Guid WorkitemTypeId { get; init; } // Идентификатор типа задачи
public required DateTime WorkitemCreationDate { get; set; } // Дата создания задачи
public required Guid? WorkitemWorkflowId { get; init; } // Идентификатор рабочего процесса задачи
public Guid WorkitemParentId { get; init; } // Идентификатор родительского элемента (задачи или папки)
public Guid? WorkitemStatusId { get; init; } // Идентификатор статуса
public Guid WorkitemCreatedBy { get; set; } // Идентификатор пользователя, который создал задачу
public Guid WorkitemUpdatedBy { get; set; } // Идентификатор пользователя, который последний изменил задачу
public DateTime WorkitemUpdateDate { get; set; } // Дата изменения задачи
public DateTime? WorkitemDueDate { get; set; } // Дата выполнения
public DateTime? WorkitemEndDate { get; set; } // Дата завершения
public DateTime? WorkitemStartDate { get; set; } // Дата начала
public Dictionary<Guid, object?> WorkitemAttributesValues { get; set; } = new(); // Значения пользовательских атрибутов
public OkrProgressType? WorkitemProgressType { get; set; }
public string? WorkitemProgressData { get; set; }
public int? WorkitemProgressValue { get; set; }
public int? WorkitemEstimatedTime { get; set; } // Оценка в часах
public int? WorkitemSpentTime { get; set; } // Сумма затраченного времени
public int? WorkitemLeftTime { get; set; } // Оставшееся время
public int? WorkitemEstimatedStoryPoints { get; set; } // Оценка в сторипоинтах
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Соответствие типа объекта в полях NewValue
и OldValue
в зависимости от типа события приведено в таблице:
Событие | Тип объекта | Описание объекта |
---|---|---|
Изменение родительской задачи или папки | Guid |
Идентификатор задачи или папки |
Изменение типа задачи | Guid? |
Идентификатор типа |
Изменение процесса | Guid? |
Идентификатор процесса |
Изменение статуса | Guid |
Идентификатор статуса |
Изменение имени | string |
Название задачи |
Изменение описания | string |
Описание задачи |
Изменение ответственного | Guid? |
Идентификатор ответственного |
Изменение даты начала | DateTime? |
Дата начала |
Изменение даты выполнения | DateTime? |
Дата выполнения |
Изменение оценки в часах | int? |
Оценка в секундах |
Изменение оценки в сторипоинтах | int? |
Оценка в сторипоинтах |
Изменение спринта | Guid? |
Идентификатор спринта |
Изменение значения прогресса | int? |
Значение прогресса в % |
Изменение пользовательского атрибута "Число" | int? |
Числовое значение атрибута |
Изменение пользовательского атрибута "Строка" | int? |
Строковое значение атрибута |
Изменение пользовательского атрибута "Выбор из списка" | string? |
Значение опции атрибута |
Изменение пользовательского атрибута "Тег" | string? |
Значение опции атрибута |
Изменение пользовательского атрибута "Пользователь" | Guid? |
Идентификатор пользователя |
Изменение пользовательского атрибута "Дата" | DateTime? |
Значение даты атрибута |
Изменение пользовательского атрибута "Время" | int? |
Значение времени в секундах |
Контекст создания списания
Когда триггером автоматизации является событие *Добавление списания времени", передаются следующие данные события:
public class TimeTrackingCreatedEventContext : EventContext
{
public Guid WorkitemId { get; set; } // Идентификатор задачи по которой добавлено списание
public Guid EntryId { get; set; } // Идентификатор списания
public DateTime CreationDate { get; set; } // Дата добавления списания
public DateTime StartDate { get; set; } // Дата списания
public int Duration { get; set; } // Время списания в секундах
public string? Description { get; set; } // Описание списания
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст изменения списания
Когда триггером автоматизации является событие "Редактирование списания времени" передаются следующие данные события:
public class TimeTrackingUpdatedEventContext : EventContext
{
public Guid WorkitemId { get; set; } // Идентификатор задачи по которой добавлено списание
public Guid EntryId { get; set; } // Идентификатор списания
public DateTime CreationDate { get; set; } // Дата добавления списания
public DateTime StartDate { get; set; } // Дата списания
public int Duration { get; set; } // Время списания в секундах
public string? Description { get; set; } // Описание списания
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст добавления задачи в элемент портфеля
Когда триггером автоматизации является событие Добавление задачи в элемент портфеля, передаются следующие данные события:
public class WorkitemAddedToPortfolioElementEventContext : EventContext
{
public Guid WorkitemId { get; set; } // Идентификатор задачи, добавленной в элемент портфеля
public Guid PortfolioElementId { get; set; } // Идентификатор элемента портфеля
public string PortfolioElementName { get; set; } = default!; // Название элемента портфеля
public Guid? PortfolioElementStatusId { get; set; } // Идентификатор статуса элемента портфеля
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст удаления задачи из элемента портфеля
Когда триггером автоматизации является событие Удаление задачи из элемента портфеля передаются следующие данные события:
public class WorkitemDeletedFromPortfolioElementEventContext : EventContext
{
public Guid WorkitemId { get; set; } // Идентификатор задачи, добавленной в элемент портфеля
public Guid PortfolioElementId { get; set; } // Идентификатор элемента портфеля
public string PortfolioElementName { get; set; } = default!; // Название элемента портфеля
public Guid? PortfolioElementStatusId { get; set; } // Идентификатор статуса элемента портфеля
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст создания спринта
Когда триггером автоматизации является событие Создание спринта, передаются следующие данные события:
public class SprintCreatedEventContext : EventContext
{
public Guid ExtensionId { get; set; } // Идентификатор расширения Agile
public Guid SprintId { get; set; } // Идентификатор спринта
public string SprintName { get; set; } // Название спринта
public SprintStatus SprintStatus { get; set; } // Статус спринта
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Контекст изменения статуса спринта
Когда триггером автоматизации является событие Изменение статуса спринта, передаются следующие данные события:
public class SprintUpdatedEventContext : EventContext
{
public Guid ExtensionId { get; set; } // Идентификатор расширения Agile
public Guid SprintId { get; set; } // Идентификатор спринта
public string SprintName { get; set; } // Название спринта
public SprintStatus SprintStatus { get; set; } // Статус спринта
public Guid? TenantId { get; init; } // Идентификатор тенанта
public Guid EventId { get; init; } // Идентификатор события
public EventTypes EventType { get; init; } // Тип события
public string EventName { get; init; } // Название события
public Guid UserId { get; init; } // Идентификатор пользователя, инициировавшего событие
public Guid WorkspaceId { get; init; } // Идентификатор пространства, в котором произошло событие
public string WorkspaceKey { get; init; } // Ключ пространства, в котором произошло событие
}
Методы Script API
Метод, в котором выполняется пользовательский код, технически находится в классе, наследуемом от базового класса,
имеющим веб-клиент CwmPublicAPI
и набор методов.
Примеры использования функций приведены в подразделе Примеры.
Сигнатуры методов
Сигнатуры методов имеют своими аргументами идентификаторы или имена/ключи задач, пространств, папок и т.д., там где это применимо, но они, как правило, необязательные. Если что-либо пропущено, то подразумевается текущее пространство, текущая задача и т.п., а для удобства использования они перечислены в порядке возрастания иерархии:
GetWorkitem(string? workitemKey = null, string? workspaceKey = null);
Методы работы с пространствами
Task<List<WorkspaceModel>?> GetWorkspaces()
Task<WorkspaceModel?> GetWorkspace(Guid workspaceId)
Task<WorkspaceModel?> GetWorkspace(string workspaceKey = null)
Task<WorkspaceModel> CreateWorkspace(string name, string key, string? description = null)
Task<WorkspaceModel> UpdateWorkspaceName(string name, string? workspaceKey = null)
Task DeleteWorkspace(string? workspaceKey = null)
Методы работы с ролями
Task<List<RoleModel>?> GetRoles(string? workspaceKey = null)
Task<List<RoleModel>?> GetRoles(bool? isSystem, string? workspaceKey = null)
Task<RoleModel?> GetRole(Guid roleId, string? workspaceKey = null)
Task<RoleModel?> GetRole(string role, string? workspaceKey = null)
Task<RoleModel> CreateRole(string name, List<Permission?>? permissions, string? workspaceKey = null)
Task<RoleModel> UpdateRolePermissions(Guid roleId, List<Permission?>? permissions = null, string? workspaceKey = null)
Методы работы с пользователями
Task<List<UserModel>?> GetUsers()
Task<UserModel?> GetUser(Guid userId)
Task<UserModel?> GetUser(string userName)
Task<List<UserModel>?> GetUsersByRole(Guid roleId, string? workspaceKey = null)
Task AddUserRole(Guid userId, Guid roleId, string? workspaceKey = null)
Task DeleteUserRole(Guid userId, Guid roleId, string? workspaceKey = null)
Методы работы с группами
Task<List<GroupModel>?> GetUsersGroups()
Task<GroupModel?> GetUserGroup(Guid userGroupId)
Task<List<GroupModel>?> GetUsersGroups(string userName)
Task DeleteGroupRole(Guid groupId, Guid roleId, string? workspaceKey = null)
Методы работы с папками
Task<List<FolderModel>?> GetFolders(string? workspaceKey = null)
Task<List<FolderModel>?> GetFolderByParent(Guid parentId, string? workspaceKey = null)
Task<FolderModel?> GetFolder(Guid folderId, string? workspaceKey = null)
Task<FolderModel?> GetFolder(string name, string? workspaceKey = null)
Task<FolderModel> CreateFolder(string name, Guid? parentId = null, string? workspaceKey = null)
Task<FolderModel?> UpdateFolder(PatchFolderRequestBody body, Guid folderId, string? workspaceKey = null) // общего вида - сразу все свойства скопом
Task<WorkitemModel> UpdateFolderName(string name, Guid folderId, string? workspaceKey = null)
Task DeleteFolder(Guid folderId, string? workspaceKey = null)
Методы работы с типами
Task<List<TypeModel>?> GetTypes(string? workspaceKey = null)
Task<TypeModel?> GetType(Guid typeId, string? workspaceKey = null)
Task<TypeModel?> GetType(string typeName, string? workspaceKey = null)
Task<TypeModel> CreateType(CreateTypeRequestBody body, string? workspaceKey = null)
Task DeleteType(Guid typeId, string? workspaceKey = null)
Task DeleteType(string? type, string? workspaceKey = null)
Методы работы со статусами
Task<List<StatusCategoryModel>?> GetStatusCategories()
Task<List<StatusModel>?> GetStatuses(string? workspaceKey = null)
Task<StatusModel?> GetStatus(Guid statusId, string? workspaceKey = null)
Task<StatusModel?> GetStatus(string name, string? workspaceKey = null)
Task<StatusModel> CreateStatus(CreateStatusRequestBody body, string? workspaceKey = null)
Методы работы с атрибутами типов
Task<List<AttributeModel>?> GetAttributes(string? workspaceKey = null)
Task<AttributeModel?> GetAttribute(Guid attributeId, string? workspaceKey = null)
Task<AttributeModel?> GetAttribute(string attributeName, string? workspaceKey = null)
Task<AttributeModel> CreateNumberAttribute(string name, string? description, string? workspaceKey = null)
Task<AttributeModel> CreateUniStringAttribute(string name, string? description = null, string? workspaceKey = null)
Task<AttributeModel> CreateUserAttribute(string name, string? description = null, string? workspaceKey = null)
Task<AttributeModel> CreateDateAttribute(string name, string? description = null, string? workspaceKey = null)
Task<AttributeModel> CreateTimeAttribute( string name, string? description = null, string? workspaceKey = null)
Task<AttributeModel> CreateUniSelectAttribute(string name, IEnumerable<string> listOptions, string? description = null, string? workspaceKey = null)
Task<AttributeModel> CreateTagAttribute(string name, LIEnumerablest<string> listOptions, string? description = null, string? workspaceKey = null)
Task<AttributeModel> UpdateWorkitemAttribute(Guid attributeId, PatchAttributeRequestBody body, string? workspaceKey = null)
Task<AttributeModel> UpdateScalarWorkitemAttribute(Guid attributeId, string name, string? description = null, string? workspaceKey = null) // Все скалярные
Task<AttributeModel> UpdateListWorkitemAttribute(Guid attributeId, string name, List<PatchAttributeOptionModel> listOptions, string? description = null, string? workspaceKey = null) // UniSelect & Tag
Task DeleteAttribute(Guid attributeId, string? workspaceKey = null)
Методы работы с задачами
Task<List<WorkitemModel>?> GetWorkitems(string? workspaceKey = null)
Task<WorkitemModel?> GetWorkitem(Guid workitemId, string? workspaceKey = null)
Task<WorkitemModel?> GetWorkitem(string? workitemKey = null, string? workspaceKey = null)
Task<List<WorkitemModel>?> GetWorkitemByParent(bool withSubitems = false, string? parentKey = null, string? workspaceKey = null) // планарный список для иерархии потомков (withSubitems = true)
Task<WorkitemModelTree?> GetWorkitemTree(Guid? parentId = null, string? workspaceKey = null) // потомки в виде иерархического дерева, WorkitemModelTree - собственный тип ScriptAPI (https://git.testit.ru/teamstorm/teamstorm/-/blob/feature/ib/TS-8917-scripts-child-tasks/src/backend/dotnet/AutomationService.ScriptGate/Contracts/Tree.cs?ref_type=heads)
Task<WorkitemModel> CreateWorkitem(CreateWorkitemRequestBody body, string? workspaceKey = null)
Task<WorkitemModel?> UpdateWorkitem(PatchWorkitemRequestBody body, string? workitemKey = null, string? workspaceKey = null) // общего вида
Task<WorkitemModel> UpdateWorkitemParent(Guid? parentId, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemStatus(string status, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemType(string typeName, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemName(string name, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemDescription(string desc, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemAssignee(Guid userId, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemAssignee(string? userName, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemStartDate(DateTime? startDate, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemDueDate(DateTime? dueDate, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemSprint(Guid? sprintId, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemStoryPoints(int? points, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemOriginalEstimate(int? estimate, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemWorkflow(Guid? workflowId, string? workitemKey = null, string? workspaceKey = null)
Task<WorkitemModel> UpdateWorkitemPortfolioElement(List<Guid?>? elementIds, string? workitemKey = null, string? workspaceKey = null)
Task DeleteWorkitem(string? workitemKey = null, string? workspaceKey = null)
Методы работы со значениями атрибутов
Атрибуты с типом Число
Task<NumberFieldValueModel?> GetNumberAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<NumberFieldValueModel?> GetNumberAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<NumberFieldValueModel?> UpdateNumberAttributeValue(string attributeName, double? value, string? workitemKey = null, string? workspaceKey = null)
Task<NumberFieldValueModel?> UpdateNumberAttributeValue(Guid attributeId, double? value, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Строка
Task<UniStringFieldValueModel?> GetUniStringAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<UniStringFieldValueModel?> GetUniStringAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<UniStringFieldValueModel?> UpdateUniStringAttributeValue(string attributeName, string value, string? workitemKey = null, string? workspaceKey = null)
Task<UniStringFieldValueModel?> UpdateUniStringAttributeValue(Guid attributeId, string value, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Выбор из списка
Task<UniSelectFieldValueModel?> GetUniSelectAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<UniSelectFieldValueModel?> GetUniSelectAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<UniSelectFieldValueModel?> UpdateUniSelectAttributeValue(string attributeName, string option, string? workitemKey = null, string? workspaceKey = null)
Task<UniSelectFieldValueModel?> UpdateUniSelectAttributeValue(Guid attributeId, string option, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Тег
Task<TagFieldValueModel?> GetTagAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<TagFieldValueModel?> GetTagAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<TagFieldValueModel?> UpdateTagAttributeValue(string attributeName, List<string> options, string? workitemKey = null, string? workspaceKey = null)
Task<TagFieldValueModel?> UpdateTagAttributeValue(Guid attributeId, List<string> options, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Дата
Task<DateFieldValueModel?> GetDateAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<DateFieldValueModel?> GetDateAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<DateFieldValueModel?> UpdateDateAttributeValue(string attributeName, DateTime? value, string? workitemKey = null, string? workspaceKey = null)
Task<DateFieldValueModel?> UpdateDateAttributeValue(Guid attributeId, DateTime? value, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Пользователь
Task<UserFieldValueModel?> GetUserAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<UserFieldValueModel?> GetUserAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<UserFieldValueModel?> UpdateUserAttributeValue(string attributeName, Guid userId, string? workitemKey = null, string? workspaceKey = null)
Task<UserFieldValueModel?> UpdateUserAttributeValue(Guid attributeId, Guid userId, string? workitemKey = null, string? workspaceKey = null)
Атрибуты с типом Время
Task<TimeFieldValueModel?> GetTimeAttributeValue(Guid attributeId, string? workitemKey = null, string? workspaceKey = null)
Task<TimeFieldValueModel?> GetTimeAttributeValue(string attributeName, string? workitemKey = null, string? workspaceKey = null)
Task<TimeFieldValueModel?> UpdateTimeAttributeValue(string attributeName, int? seconds, string? workitemKey = null, string? workspaceKey = null)
Task<TimeFieldValueModel?> UpdateTimeAttributeValue(Guid attributeId, int? seconds, string? workitemKey = null, string? workspaceKey = null)
Методы работы с комментариями
Task<List<CommentModel>?> GetWorkitemComments(string? workitemKey = null, string? workspaceKey = null)
Task<CommentModel> CreateWorkitemComment(string text, string? workitemKey = null, string? workspaceKey = null)
Методы работы с вложениями
Task<List<AttachmentModel>?> GetWorkitemAttachments(string? workitemKey = null, string? workspaceKey = null)
Task<AttachmentModel?> GetWorkitemAttachment(Guid attachmentId, string? workitemKey = null, string? workspaceKey = null)
Task DeleteAttachment(Guid attachmentId, string? workitemKey = null, string? workspaceKey = null)
Методы работы с портфелями
Task<List<PortfolioModel>?> GetPortfolios(string? workspaceKey = null)
Task<List<PortfolioModel>?> GetPortfoliosInFolder(Guid folderId, string? workspaceKey = null)
Task<PortfolioModel?> GetPortfolio(Guid portfolioId, string? workspaceKey = null)
Task<PortfolioModel?> GetPortfolio(string name, string? workspaceKey = null)
Task<PortfolioModel> CreatePortfolio(string name, Guid folderId, string? workspaceKey = null)
Task<PortfolioModel> UpdatePortfolio(Guid portfolioId, string name, string? workspaceKey = null)
Task DeletePortfolio(Guid portfolioId, string? workspaceKey = null)
Работа с элементами портфеля
Task<List<PortfolioElementModel>?> GetPortfolioElements(string? workspaceKey = null)
Task<List<PortfolioElementModel>?> GetPortfolioElementsInFolder(Guid folderId, string? workspaceKey = null)
Task<List<PortfolioElementModel>?> GetPortfolioElementsForStatus(string status, string? workspaceKey = null)
Task<List<PortfolioElementModel>?> GetPortfolioElements(Guid portfolioId, string? workspaceKey = null)
Task<PortfolioElementModel?> GetPortfolioElement(Guid elementId, string? workspaceKey = null)
Task<PortfolioElementModel?> GetPortfolioElement(string elementName, string? workspaceKey = null)
Task<PortfolioElementModel> CreatePortfolioElement(CreatePortfolioElementRequestBody body, string? workspaceKey = null)
Task<PortfolioElementModel> UpdatePortfolioElement(PortfolioElementModel body, string? workspaceKey = null)
Task DeletePortfolioElement(Guid elementId, string? workspaceKey = null)
Получение задач в элементе портфеля
Task<List<WorkitemModel>?> GetWorkitemsByPortfolioElement(Guid elementId, string? workspaceKey = null)
Методы работы с Agile
Task<List<AgileModel>?> GetAgileExtensions(string? workspaceKey = null)
Task<AgileModel?> GetAgileExtension(Guid agileExtensionId, string? workspaceKey = null)
Task<AgileModel> CreateAgile(CreateAgileRequestBody body, string? workspaceKey = null)
Task DeleteAgile(Guid agileExtensionId, string? workspaceKey = null)
Работа со спринтами
Task<List<SprintModel>?> GetSprints(string? workspaceKey = null)
Task<SprintModel?> GetSprint(Guid sprintId, string? workspaceKey = null)
Task<SprintModel?> GetSprint(string name, string? workspaceKey = null)
Task<SprintModel> CreateSprint(CreateSprintRequestBody body, string? workspaceKey = null)
Task DeleteSprint(Guid sprintId, string? workspaceKey = null)
Методы работы со списаниями
Task<List<TimeTrackingEntryModel>?> GetTimeTrackingEntries(DateTime? startDate = null, DateTime? endDate = null,
List<string>? users = null, int? maxItemsCount = 50, string? fromToken = null)
Методы работы со связями
Методы для отправки HTTP-запросов
Task<string> SendHttpRequest(string url, HttpRequest request) // аргумент request содержит в себе все возможные свойства, передаваемые в следующей функции напрямую
Task<string> SendHttpRequest(string url, HttpMethod method = HttpMethod.Get, object? body = null,
List<(string Name, string Value)>? headers = null, string mediaType = "application/json",
IReadOnlyDictionary<string, object?>? options = null)
Примеры
Примечание
Для всех функций ScriptAPI (доступ к PublicAPI и логирование) необходимо указывать впереди ключевое слово await, так как они асинхронные.
Синтаксис языка — C11, поэтому инициализация коллекций происходит следующим образом: List<int> list = new { 1, 2 }, а не List<int> list = [ 1, 2 ]
.
Простейший пример скрипта, который даже не использует PublicAPI:
debug("USER = " + e.UserId);
Примечание
Если тело скрипта передается в запросе напрямую (на странице Swagger или утилите типа Postman), все внутренние двойные кавычки свойства, передаваемого JSON, необходимо экранировать:
{
Name: "Script1",
ScriptType: "Method",
EventType: "WorkitemNameChanged",
Script: "debug(\"USER = \" + e.UserId);", // вот тут в тексте самого скрипта - экранирование кавычек
}
Пример создания папки со случайным именем
var r = new Random();
var newName = $"name{r.Next(0, 1000)}";
await CreateFolder(newName); // вот тут должно быть await
debug("New name = " + newName);
Примеры создания скриптов
// Сравнение с текущим событием можно будет делать как по его Id, так и по его имени (enum лучше)
// Кейс 1: e.EventId == Events.WorkitemCreated (Events - класс с полями в виде именованных guid + некоторые вспомогательные функции)
// Кейс 2: e.EventType == EventTypes.WorkitemCreated (EventTypes - enum)
// Events также имеет статический словарь '<Guid, EventTypes> Map' - Id и enum события для системных полей
// Имена обсуждаемы
// Сценарий: автозаполнение исполнителя в зависимости от типа запроса
var wiType = await GetType(e.WorkitemTypeId);
if (e.EventType == EventTypes.WorkitemCreated && wiType.Name == "Bug") {
// UserModel? assignee = await GetUser("ivan.ivanov"); // в данном случае получение модели излишне
WorkitemModel? workitem = await UpdateWorkitemAssignee("ivan.ivanov");
}
// Сценарий: по умолчанию проставление среднего приоритета при регистрации запроса
var wiType = await GetType(e.WorkitemTypeId);
if (e.EventId == EventTypes.WorkitemCreated && wiType.Name == "Bug") {
// если уже имеется Id атрибута, лучше использовать функцию, принимающую именно его, а не имя (производительность)
await UpdateUniSelectAttributeValue("Приоритет", "Средний"); // текущий воркайтем
//await SetUniSelectAttributeValue(attributeId, "Средний", workitemId2); // сторонний воркайтем, но текущего воркспейса
//await SetUniSelectAttributeValue(attributeId, "Средний", workitemId2, workspaceId2); // воркайтем в стороннем воркспейсе
}
// Сценарий: проставление команды в зависимости от исполнителя
var user = await GetUser(e.WorkitemAssigneeId);
// 'WorkitemChanged' нет - все события на изменение гранулярные
if (e.EventType == EventTypes.WorkitemNameChanged && user.Username == "ivan.ivanov") {
await UpdateUniSelectAttributeValue("Команда", "Alfa");
}
// Сценарий: Автоматическое назначение на задачу определенной проектной роли. Как следствие назначается пользователь, у которого установлена такая проектная роль.
List<UserModel> users = await GetUsersByRole(roleId); // можно так (все функции планарно на одном уровне, но функции могут быть длиннее по имени - с префиксом сущности)
// List<UserModel> users = await WorkspaceUsers.FindByRole(role); // а можно эдак (в АПИ организовать отдельные 'свойства доступа': для текущего воркайтема, общего доступа в воркспейсам, юзерам и т.д.)
// Сценарий: Автоматическое присвоение типа документа по вхождению определенного текста в название документа.
// Сценарий: Создание задачи с автоматическим определением типа на базе локации пользователя, то есть где пользователь инициировал создание задачи. Чаще всего применимо к спискам (портфелям).
WorkitemModel wi = await UpdateWorkitemType("SomeType"); // текущему воркайтему
// Сценарий: Расчет и заполнение атрибута в зависимости от значений других атрибутов текущей задачи. Например, автоматическое присваивание задаче портфеля, если она является определенного типа.
PortfolioElementModel? elem1 = await GetPortfolioElement(elementId);
PortfolioElementModel? elem1 = await GetPortfolioElement("Element1"); // или по elementName
// PorfolioElementModel? elem1 = await PorfolioElements.FindByName(name); // либо так
elem1.StartDate = DateTimeOffset.UtcNow.AddDays(10).Date; // изменить сам элемент
await UpdatePortfolioElement(elem1);
await UpdateWorkitemPortfolioElements(elementIds); // привязка к воркайтему списка элементов портфеля - по guid
// Сценарий: Установить ответственного при определённых значениях
var priorityValue = await GetUniSelectAttributeValue(priorityAttributeName);
var tagValue = await GetTagAttributeValue(tagAttributeName); // текущий воркайтем
if (priorityValue.Value.Name == "Высокий" && tagValue.Value.Any(a => a.Name == "UX")) {
await UpdateWorkitemAssignee(userId); // текущему воркайтему!
}
// Автоматически рассчитать стоимость задачи и записать результат в атрибут "Общая стоимость", перемножив значения атрибутов "Оценка в часах" и "Стоимость часа".
NumberFieldValueModel attr1 = await GetNumberAttributeValue("Оценка в часах");
NumberFieldValueModel attr2 = await GetNumberAttributeValue("Стоимость часа");
if(attr1.Value != null && attr2.Value != null)
{
var val3 = attr1.Value * attr2.Value;
await UpdateNumberAttributeValue("Общая стоимость", val3);
}
// Автоматически рассчитать сумму атрибутов “Оценка” во всех дочерних задачах и заполнить рассчитанным значением атрибута “Оценка“ в родительской задаче.
var tree = await GetWorkitemTree();
List<WorkitemModel> sons = tree.GetChildren();
var result = 0.0;
foreach (var son in sons)
{
var attribute = son.Attributes.Single(a => a.NumberFieldValueModel.Name == "Оценка");
result += attribute.NumberFieldValueModel.Value ?? 0;
}
await UpdateNumberAttributeValue("Оценка", result);
HTTP-client
В ScriptAPI реализован HTTP-клиент для того, чтобы можно было автоматизировать интеграцию с внешними системами.
Для управления HTTP-запросами реализована следующие функции-обертки:
// метод, позволяющий получать HTTP-доступ ко внешним Интернет-ресурсам (его безопасность управляется настройкам переменных окружения, см. соответствующий раздел):
Task<string> SendHttpRequest(string url, HttpRequest request) // аргумент request содержит в себе все возможные свойства, передаваемые в следующей функции напрямую
Task<string> SendHttpRequest(string url, HttpMethod method = HttpMethod.Get, object? body = null,
List<(string Name, string Value)>? headers = null, string mediaType = "application/json",
IReadOnlyDictionary<string, object?>? options = null)
Ended: Скриптовая автоматизация
Профиль пользователя ↵
Профиль пользователя
После входа в систему вы можете перейти в профиль пользователя. В профиле можно:
Переход в профиль пользователя
- Нажмите значок пользователя в правом верхнем углу экрана.
- Выберите Профиль.
После входа будет открыт экран настроек профиля.
Настройки профиля
Установка аватара
Загрузка аватара
- В блоке Фото наведите курсор на существующий аватар или значок пользователя.
- Нажмите отобразившуюся кнопку Загрузить аватар.
- В открывшемся системном