Создание Workflow

Материал из Документация Ключ-АСТРОМ

Создание Workflow

Чтобы создать Workflow, необходимо:

  • Создать пустой Workflow.
  • Определить триггер.
  • Добавить задачи.

Для более детальной настройки потока управления используйте условия задач.

Создание Workflow

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

Создание пустого Workflow

Чтобы создать пустой Workflow:

  • Перейдите в Workflows.
  • Убедитесь, что вы на вкладке Все Workflows, а не на вкладке Выполнения.
  • Выберите Workflow в правом верхнем углу страницы.

Черновик Workflow Новый Workflow по умолчанию является черновиком. Вы можете работать с черновиком и запускать его вручную, не расходуя часы Workflow. Вам нужно развернуть изменения черновика, чтобы активировать автоматические триггеры или обновить существующую live-версию Workflow. Развёртывание черновика создаёт новую версию live-Workflow. Вы также можете вносить изменения в live-Workflow через черновик, чтобы избежать немедленного влияния на live-Workflow. При необходимости можно также вносить изменения в live-Workflow напрямую.

Редактор показывает баннер «черновик» или «live-Workflow» в верхней части. Также есть подсказка о том, кто последним редактировал черновик.

  • Выберите заголовок Workflow. По умолчанию это Untitled workflow, и введите собственное имя.
  • В разделе Выбрать триггер выберите тип триггера из любой категории (Событие, Расписание или По требованию) и настройте его.
  • Чтобы добавить первую задачу, выберите Добавить задачу на узле триггера.
  • В разделе Выбрать действие выберите тип действия. Панель сведений о задаче справа показывает входные данные задачи в соответствии с выбранным действием.
  • Выберите Создать черновик. Workflow появится как Черновик на вкладке «Все Workflows».
  • Вы можете запустить Workflow вручную. Выполнение черновика Workflow не отображается в списке «Выполнения».
  • Выберите Развернуть. Создаётся новая версия Workflow. Если триггер автоматический, он будет работать с этого момента.
  • Выберите Запустить. Выполнение записывается в список на вкладке «Выполнения».

Создание Workflow из шаблона

Шаблоны Workflow дают готовые определения для распространённых сценариев автоматизации. Многие приложения Ключ-АСТРОМ поставляются с шаблонами — ищите их в Расширения, чтобы найти подходящие для ваших вариантов использования.

Чтобы создать Workflow из шаблона:

  • Перейдите в Workflows.
  • Убедитесь, что вы на вкладке Все Workflows, а не на вкладке Выполнения.
  • Выберите Workflow в правом верхнем углу страницы.
  • Просмотрите список доступных шаблонов. Вы также можете искать или фильтровать по приложению.
  • Выберите шаблон.
  • Следуйте мастеру импорта, чтобы проверить требования приложения и определить соединения, затем выберите Создать Workflow.
  • При необходимости измените Workflow.
  • Выберите Сохранить, чтобы сохранить ваш настроенный Workflow.

Создание Workflow из шаблона (локальный файл YAML)

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

  • Перейдите в Workflows.
  • Выберите Загрузить, чтобы загрузить файл YAML.
  • Следуйте мастеру импорта, чтобы сопоставить соединения и проверить требования приложения, затем выберите Создать Workflow.
  • При необходимости измените Workflow.
  • Выберите Сохранить, чтобы сохранить ваш настроенный Workflow.

Подробнее см. в разделе Загрузка Workflow или шаблона Workflow.

Разделы редактора Workflow

Если вы создаёте новый Workflow или открываете существующий, редактор представляет новый Workflow. Редактор Workflow состоит из трёх разделов:

  • Заголовок
  • Редактор Workflow
  • Панель сведений

Раздел заголовка

Раздел заголовка показывает заголовок вашего Workflow и предлагает некоторые взаимодействия с Workflow.

  • Заголовок Workflow — если у вас есть несохранённые изменения, рядом с ним появляется значок «Изменено».
  • Действия — справа от заголовка Workflow находятся взаимодействия, которые можно выполнить с Workflow.
    • Сохранить Workflow.
    • Запустить Workflow.
    • Открыть Настройки Workflow для просмотра владельца, настройки актора, входных данных и результата Workflow.
    • Просмотреть настройки Workflow, чтобы увидеть связанного актора Workflow. Актор — это пользовательский контекст, в котором выполняются задачи Workflow.
    • Переключаться между опциями Сделать приватным или Сделать публичным. По умолчанию Workflow виден только создателю (владельцу Workflow). Когда вы делаете Workflow публичным, любой пользователь с разрешениями может получить к нему доступ.
    • Удалить Workflow.

Редактор Workflow

Панель редактора Workflow (основная область под заголовком) отображает графическое представление Workflow. Она всегда содержит узел триггера, который предоставляет доступ к конфигурации триггера. Задачи и их соединения (переходы) дают представление о потоке управления.

  • Чтобы переместить Workflow, выберите и перетащите фон.

Панель сведений

Панель сведений справа предоставляет доступ к детальным настройкам и свойствам текущего выбора в редакторе Workflow.

  • Чтобы получить доступ к конфигурации триггера, выберите узел триггера.
  • Чтобы получить доступ к деталям (таким как Входные данные, Условия и Опции) задачи, выберите задачу.

Редактирование live-Workflow

Вы можете редактировать Workflow после его создания и развёртывания. Перейдите в Редактировать Workflow в разделе заголовка. Учтите, что любые сохранённые изменения немедленно вступают в силу. Редактирование live-Workflow следует выполнять только для непроизводственных вариантов использования или когда требуется исправление. Рекомендуется вносить изменения через черновики, чтобы их можно было протестировать без влияния на выполнение текущего live-Workflow. Сохранение изменений в live-Workflow отменит ваш черновик. Это делается для предотвращения несоответствия между черновиком и live-изменениями.

Редактирование черновика Workflow

Вы можете редактировать черновик Workflow. Вы также можете открыть Workflow и редактировать его в режиме черновика. Редактирование live-Workflow и сохранение его как черновика позволяет экспериментировать с черновиком, пока вы не убедитесь, что он готов к развёртыванию.

Опции Workflow

Опции Workflow предоставляют следующие параметры конфигурации Workflow.

Владелец и актор

  • Владелец — по умолчанию пользователь, создавший Workflow. Владельцем может быть пользователь или группа. В случае приватного Workflow только владелец (пользователь или группа) имеет доступ к Workflow.
  • Актор — пользовательский контекст для всех задач и их действий. Актором может быть как интерактивный пользователь, так и сервисный пользователь. Дополнительную информацию о контексте актора и конфигурации разрешений см. в разделе Управление разрешениями Workflow.

Описание Workflow

Описание Workflow помогает зафиксировать любую документацию.

Руководство Workflow

Workflow могут включать руководство, которое объясняет предварительные требования и шаги настройки. Чтобы добавить или изменить руководство Workflow:

  • После создания нового Workflow выберите Настройки. Панель опций появится справа на экране.
  • В разделе Руководство Workflow выберите Добавить руководство. Панель руководства появится в нижней части Workflow.
  • Выберите Редактировать руководство, чтобы отредактировать руководство. Откроется текстовый редактор, в котором можно создать или отредактировать руководство. Для форматирования можно использовать Markdown.
  • Когда вы закончите писать руководство, выберите Готово.

Вы можете ссылаться на элементы внутри Workflow, используя относительные или абсолютные пути. Например, используйте следующие относительные ссылки для ссылок на панели внутри Workflows:

  • [Опции](?options): открывает опции Workflow.
  • [Триггер](?trigger): открывает конфигурацию триггера.
  • [Задача](?task=http_request_1&tab=options): открывает задачи и выбирает настроенную вкладку.

Чтобы удалить руководство, выберите Удалить руководство.

Входные данные и результат Workflow

  • Входные данные Workflow по умолчанию — это глобальный конфигурационный объект Workflow в нотации JSON, а выражение ввода позволяет получить к нему доступ во входных данных задачи. Входные данные по умолчанию объединяются с любыми входными данными, предоставленными во время выполнения. Размер входных данных Workflow по умолчанию ограничен 10 МБ.
  • Результат Workflow позволяет скомпилировать результат из любых соответствующих свойств результата задачи по мере необходимости. Используйте выражения для ссылки на результаты задач и убедитесь, что результат вычисляется в допустимый объект JSON. Сбой во время вычисления выражения результата, вычисленный результат Workflow, не являющийся допустимым объектом JSON, или результат, превышающий лимит размера, приведут к сбою выполнения Workflow. Размер результата выполнения Workflow ограничен 10 МБ.

Триггер

Триггеры Workflow определяют, что заставляет Workflow запускаться. Триггером может быть расписание, событие, ручное взаимодействие (по требованию) или запрос API.

Задачи

Задачи определяют входные данные для действий, имеют опции для цикла, повторных попыток или тайм-аута обработки действий и определяют условия, которые заставляют их выполняться. Условия либо связаны с состояниями предшественников, либо являются пользовательскими выражениями.

Добавление задачи

Чтобы добавить задачу, наведите курсор на узел триггера или любую существующую задачу в Workflow и выберите Добавить задачу. Задачи выполняются как ориентированный ациклический граф (DAG). Это означает, что задачи упорядочены последовательно без циклов и выполняются в одном направлении.

Чтобы добавить задачу в Workflow:

  • Откройте Workflow для редактирования.
  • Наведите курсор на узел триггера или любую существующую задачу на графе и выберите Добавить.
  • Выберите тип действия для задачи, чтобы добавить её в Workflow.
  • Необязательно: выберите имя задачи, чтобы отредактировать его. Имя задачи должно быть уникальным в рамках Workflow. Вы можете использовать имя задачи для доступа к её выходным данным в последующих задачах.
  • Заполните форму ввода задачи, чтобы настроить её поведение.
  • Сохраните Workflow.

Невозможно добавить условие «Запустить эту задачу, если» и «Иначе» к первой задаче. Как непосредственный преемник триггера, ни одна задача не может определить условие состояния для предшественника, поскольку его не существует. Тем не менее, можно настроить пользовательское условие для оценки свойств контекста событийного триггера.

  • Чтобы изменить тип задачи, выберите Изменить действие в правом верхнем углу сведений о задаче. Изменение типа отменяет текущую конфигурацию.
  • Чтобы изменить компоновку Workflow, перетащите задачи на новую позицию. Логический поток по-прежнему определяется условиями состояния задач. Перестановка задач сама по себе не меняет логический поток.

Добавление перехода задачи

Чтобы нарисовать переход для задачи для построения зависимости «предшественник/преемник» в виде стрелки:

  • Наведите курсор на узел триггера или любую существующую задачу на графе.
  • Выберите Добавить задачу.

Отключение или включение задачи

Во время разработки или тестирования Workflow вы часто запускаете его снова и снова. В таких случаях часто полезно временно отключить некоторые задачи в Workflow. Если задача отключена, она пропускается. В случае конфигурации условий по умолчанию (успех и пропуск) ваш Workflow ведёт себя так же, как если бы задача выполнилась успешно. Единственное отличие в том, что пропущенная задача не создаёт никакого результата. Отключённые задачи отображаются в редакторе и мониторятся в другом стиле, чтобы указать их состояние.

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

  • Наведите курсор на задачу, которую хотите отключить, откройте меню в правом верхнем углу узла задачи и выберите Отключить задачу.
  • Выберите задачу, которую хотите отключить, откройте меню в правом верхнем углу панели сведений о задаче и выберите Отключить задачу.

Сохраните Workflow. Ваши изменения вступят в силу при следующем выполнении.

Чтобы включить отключённую задачу, откройте Workflow для редактирования и выполните одно из следующих действий:

  • Наведите курсор на задачу, которую хотите включить, откройте меню в правом верхнем углу узла задачи и выберите Включить задачу.
  • Выберите задачу, которую хотите включить, откройте меню в правом верхнем углу панели сведений о задаче и выберите Включить задачу.

Удаление задачи

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

  • Наведите курсор на задачу, которую хотите удалить, откройте меню в правом верхнем углу и выберите Удалить задачу.
  • Выберите задачу, которую хотите удалить, откройте меню в правом верхнем углу и выберите Удалить задачу.
  • Выберите задачу, которую хотите удалить, и нажмите Delete на клавиатуре.

Сохраните Workflow.

Удаление перехода/условия задачи

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

  • На панели сведений справа перейдите в Условия.
  • Рядом с именем задачи выберите Удалить.
  • Невозможно удалить переход задачи непосредственно на графе. Чтобы удалить переход задачи, перейдите на вкладку Условия.
  • Удаление перехода задачи для задач, являющихся непосредственными преемниками триггера, невозможно, поскольку нет предшествующей задачи.

Условия задачи

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

Чтобы найти условие задачи:

  • Откройте Workflow.
  • Выберите задачу.
  • На панели сведений справа перейдите в Условия. Вы можете прочитать условия состояния как предложение, начинающееся с «Запустить эту задачу, если», за которым следует список всех задач-предшественников и настроенное условие состояния.

Чтобы настроить условие состояния, выберите одно из следующих:

  • успех или пропуск (по умолчанию) означает, что предшественник должен завершиться успешно или пропустить.
  • успех означает, что предшественник должен завершиться успешно.
  • ошибка или отмена означает, что предшественник должен потерпеть неудачу или быть активно отменён.
  • ошибка означает, что предшественник должен потерпеть неудачу.
  • любой означает, что предшественник должен завершиться с любым исходом.

Необязательно: вы также можете настроить пользовательское условие на панели сведений справа, ниже выражения «И пользовательское условие выполнено». Пользовательское условие формулируется как сравнение или любое другое выражение, которое вычисляется в логическое значение (true или false). Например, если вы хотите, чтобы определённая задача выполнялась только в том случае, если задача-предшественник task_1 возвращает определённое значение bar, пользовательское условие может быть следующим: Result("task 1").foo == "bar".

Условия задачи также позволяют определить, что должно произойти, если ни условие состояния, ни пользовательское условие не совпадают, используя раздел Иначе.

  • Пропустить означает, что задача пропускается и продолжается выполнение последующих задач, как определено в Workflow.
  • Остановить означает, что на этой ветви графа Workflow больше не выполняются задачи.

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

Например, задача problem_details возвращает следующий результат:

{
  "title": "CVE-2023-36049",
  "status": "OPEN",
  "displayId": "S-1760",
  "technology": "DOTNET",
  "description": ".NET, .NET Framework, and Visual Studio Elevation of Privilege Vulnerability",
  "riskAssessment": {
    "riskLevel": "CRITICAL",
    "riskScore": 9.8,
  },
  "affectedEntities": [
    "PROCESS_GROUP_INSTANCE-18DF39B09D1CD50E",
    "PROCESS_GROUP_INSTANCE-AF30112BB85EE3CC",
    "PROCESS_GROUP_INSTANCE-DE1745778EC39B58"
  ],
}

Если вы хотите отправить задачу эскалационного письма в офис CISO для особо критичных проблем с оценкой риска 9 или выше, вы можете использовать следующие пользовательские условия для задачи эскалационного письма:

{{ result("problem_details")["problem"]["riskAssessment"]["riskScore"] >= 9 }}

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

{{ result("problem_details")["affected_entities"] | length > 10 and result("problem_details")["problem"]["riskAssessment"]["riskLevel"] == "CRITICAL" }}

Пример условия задачи: Автоматизация тестирования PR программного проекта

Вы хотите автоматически развернуть изменения в программном проекте в системе проверки, чтобы оценить предлагаемые изменения пул-реквеста (PR). После развёртывания изменений в PR вы хотите добавить некоторые тестовые данные в систему и запустить дополнительные сквозные тесты для проверки базовой функциональности. Вы также хотите проинформировать команду, если возникнут проблемы. Как только система заработает, владелец продукта уведомляется о необходимости продолжить проверку.

Скриншот примера Workflow развёртывания проверки PR программного проекта

Этот пример включает:

  • Триггер по требованию.
  • deploy: задача для развёртывания тестовой системы.
  • prepare_test_data: задача для сохранения образцов данных в базе данных.
  • get_e2e_tests: задача для загрузки сквозных тестов из бинарного репозитория.
  • run_tests: задача для выполнения дымовых/предварительных тестов, если они определены.
  • send_error_report_to_team: задача для отправки ошибки команде со ссылкой на логи и трассировки.
  • publish_test_results: задача для публикации результатов тестов и обновления PR.
  • notify_product_owner: задача для отправки ссылки на систему проверки владельцу продукта.

Как только задача развёртывания успешно завершена, задача prepare_test_data заполнит систему проверки некоторыми данными для просмотра. В то же время задача get_e2e_tests ищет любые сквозные тесты в централизованной тестовой системе, которые могут быть или не быть для запуска. Обе задачи имеют задачу deploy в своих условиях с состоянием, установленным в «успех или пропуск» по умолчанию.

Теперь, когда вы хотите запустить тесты, задача get_e2e_tests подготовлена. Однако вы можете сделать это только после загрузки тестовых данных с помощью задачи get_e2e_tests. Поэтому действие run_tests имеет условия для запуска обеих задач get_e2e_tests и prepare_test_data с условием, установленным в «успех или пропуск» (по умолчанию).

Учитывая эти условия, вы можете не получить никаких тестов из вашей централизованной системы для запуска run_tests. Это действие следует пропустить, если нет результатов тестов. Вы можете добавить ещё одно пользовательское условие для проверки результата get_e2e_tests.

{{ result("get_e2e_tests").run_tests }}

Пользовательское условие задачи проверяется только после того, как все задачи-предшественники завершены и выполнили своё условие состояния. По умолчанию Workflow остановит выполнение, если это условие не выполнено, то есть если run_tests равно false. Однако если вы хотите пропустить этот шаг и продолжить Workflow, вы можете изменить действие «иначе» с «остановить здесь» (по умолчанию) на «пропустить».

Чтобы проинформировать команду, если запуск тестов не удался, вы можете добавить задачу send_error_report_to_team после задачи run_tests и установить условие состояния в «ошибка». Эта задача будет выполняться только в том случае, если задача run_tests завершится ошибкой.

В противном случае вы хотели бы опубликовать результаты тестов в пул-реквесте, когда тесты успешно завершены. Добавив задачу publish_test_results после задачи run_tests, по умолчанию она всегда будет выполняться, если задача run_tests была успешной или пропущенной. Однако вы хотите публиковать результаты тестов только в том случае, если мы запускаем тесты, поэтому мы устанавливаем условие состояния с «успех или пропуск» на «успех», что означает, что шаг публикации не будет выполняться, если run_tests пропущен.

Наконец, вы хотите проинформировать владельца продукта о системе проверки. Это должно произойти только после завершения любых автоматических тестов, но в любом случае, с тестами или без них. Поэтому задача notify_product_owner имеет условие состояния для run_tests, установленное в «любой».

Опции задачи

Вы можете настроить определённое поведение задачи на панели сведений справа в опциях задачи.

Опции задачи:

  • Ожидание перед
  • Цикл задачи
  • Повтор при ошибке
  • Адаптировать тайм-аут

Ожидание перед

Включение переключателя позволяет настроить опцию Ожидание перед для действия. Опция «Ожидание перед» управляет тем, как долго задача остаётся в состоянии ожидания перед запуском. Значение по умолчанию — 0 секунд, максимальное значение — 86400 секунд. Вы также можете добавить выражение Jinja вместо числа.

Цикл задачи

Включение переключателя позволяет настроить опцию Цикл задачи для действия. Эта опция позволяет действию выполняться повторно путём итерации по элементам списка.

Параметры конфигурации:

  • Обязательно: имя переменной элемента.
  • Обязательно: элементы списка для цикла.
  • Параллелизм — количество раз, которое цикл выполняется последовательно. По умолчанию — один. Вы можете предоставить статический список или использовать выражение для ссылки, например, на результат предшествующей задачи.

Если вы включите опцию цикла, результаты отдельных выполнений действий образуют список. Результат всегда будет списком, независимо от длины входного списка. Кроме того, журнал задачи будет содержать конкатенацию всех журналов выполнения отдельных действий итераций.

Чтобы получить доступ к элементу списка во входной конфигурации задачи для текущей итерации, вы можете использовать выражение .item, где имя настраивается. В действии Запустить JavaScript вы можете использовать SDK для доступа к элементу цикла.

Повтор при ошибке

Включение переключателя позволяет настроить опцию Повтор при ошибке для действия, когда действие завершается неудачно.

Параметры конфигурации:

  • Количество повторных попыток по умолчанию установлено в два.
  • Задержка между повторными попытками (секунды) по умолчанию установлена в 30.

Настройки по умолчанию означают, что задача повторяет действие ещё два раза с интервалом в 30 секунд. Если действие успешно, задача также завершается успешно, и повторных попыток больше не будет. Если ни одна из повторных попыток действия не удалась, задача завершится в состоянии ошибки.

Используя опцию цикла в вашей задаче, вы можете настроить опцию Повторять только неудачные циклы.

  • Повторять только неудачные циклы означает, что по умолчанию повторяются только неудачные элементы списка в цикле (по умолчанию). Снятие флажка означает, что если один из элементов списка не удался, все элементы списка повторяются.

Адаптировать тайм-аут

Включение переключателя позволяет настроить опцию Адаптировать тайм-аут. Вы можете установить параметр Тайм-аут этой задачи (секунды), чтобы ограничить, как долго задача обрабатывается до того, как она завершится с ошибкой. Тайм-аут по умолчанию — 60 минут, до семи дней. Тайм-аут среды выполнения Ключ-АСТРОМ по умолчанию составляет 120 секунд. Тайм-аут среды выполнения Ключ-АСТРОМ ограничивает одно действие. Вы не можете увеличить тайм-аут в параметре Тайм-аут этой задачи (секунды). Задача может выполнять несколько действий в цикле или повторной попытке и работать дольше, чем отдельные действия. Это общее время выполнения учитывается в тайм-ауте задачи.