Настройка обзора Task с помощью шаблонов
В этом руководстве показано, как использовать шаблоны на основе ConfigMap для отображения насыщенных HTML-отчетов во вкладке Overview для ваших TaskRuns и PipelineRuns.
Вместо того чтобы записывать полный HTML- или Markdown-отчет в один результат Task, ваши Tasks выводят небольшие структурированные метрики, а UI использует шаблон из ConfigMap для отображения итогового обзора.
Используйте это руководство, если:
- Вам нужен единый, аккуратно оформленный обзор для
Task(например, сводка проверки кода). - Ваш Markdown-обзор приближается к эффективному лимиту размера результата
Taskили превышает его. - Вы хотите переиспользовать один и тот же макет для многих
Tasksили кластеров.
Отрисовка шаблонов — это альтернатива overview-markdown. Если
Taskпо-прежнему выводит результат с именемoverview-markdown, UI будет предпочитать этот Markdown и пропустит отрисовку шаблона.
Содержание
Предварительные требованияКак это работаетШаги1. Выберите между Markdown и шаблонами2. Создайте ConfigMap шаблона3. Добавьте результат в ваш Task4. Добавьте annotations в Task, чтобы связать его с шаблоном5. Запустите Task и проверьте вкладку OverviewСоветы и соглашенияУстранение неполадокВо вкладке Overview ничего не отображаетсяШаблон отрисовывается, но данные пустые или неверныеЛимиты размера результата или termination messageВыбран неверный шаблонПредварительные требования
- Tekton Pipelines, установленный в вашем кластере.
- Права на создание ConfigMaps в общем пространстве имен шаблонов
kube-public.
Как это работает
- Ваш
Taskвыводит один или несколько результатов, содержащих метрики или сводные данные. - Метаданные вашего
Taskвключают annotations, которые сообщают UI:- какой ConfigMap следует использовать в качестве шаблона (через selector label);
- какие результаты
Taskнужно прочитать и передать в шаблон.
- UI:
- проверяет, есть ли у
TaskRunрезультат с именемoverview-markdown. Если да, он отображает этот Markdown и останавливается; - в противном случае читает annotations шаблона из
TaskRun; - находит подходящий ConfigMap и загружает
template.ejs; - читает объявленные результаты из
TaskRunи объединяет их в одну JSON-нагрузку; - вычисляет шаблон EJS с этой нагрузкой и отображает сгенерированный HTML во вкладке Overview.
- проверяет, есть ли у
Шаги
1. Выберите между Markdown и шаблонами
Используйте результат overview-markdown, если:
- Контент короткий и его легко удержать в пределах лимитов размера результата.
- Вам нужно только очень простое форматирование.
Используйте ConfigMap с шаблоном, если:
- Вам нужен более сложный макет (колонки, бейджи, индикаторы прогресса и т. п.).
- У вас уже есть структурированные метрики, и вы хотите более удобное представление.
- Вы хотите, чтобы один и тот же макет обзора использовался несколькими
Tasks.
Если настроены оба варианта,
overview-markdownимеет приоритет. Вы можете посмотреть вывод шаблона, просто не записывая ничего в результатoverview-markdown.
2. Создайте ConfigMap шаблона
Создайте ConfigMap, который содержит ваш шаблон EJS и labels, определяющие, к какому Task он относится.
EJS — это простой язык шаблонов, который позволяет генерировать HTML-разметку с помощью обычного JavaScript. Без лишней религиозности в том, как все организовывать. Без переизобретения итерации и управления потоком. Это просто обычный JavaScript. Подробнее см.:
Пример:
Основные моменты:
- Имя файла шаблона всегда
template.ejs. - UI будет внедрять в шаблон переменные из результатов.
- Для простой логики и форматирования можно использовать обычный синтаксис EJS (
<% %>,<%= %>).
3. Добавьте результат в ваш Task
Определите в Task result, который будет содержать метрики, используемые шаблоном.
Пример Task:
Рекомендации:
- Держите результат небольшим и плоским. Используйте простые поля, такие как счетчики, проценты, статус и URLs.
- Не встраивайте большие текстовые блоки.
- Если вы используете object result, убедитесь, что шаг записывает валидный JSON (без завершающих запятых, с корректными кавычками).
4. Добавьте annotations в Task, чтобы связать его с шаблоном
Используйте annotations в Task, чтобы сообщить UI, какой шаблон использовать и какие результаты передать в него.
Пример для одного результата:
Концептуально UI сформирует такую нагрузку:
Затем он вычислит template.ejs с этой нагрузкой, чтобы вы могли использовать metrics.total, metrics.status и так далее.
Вы можете объединить несколько результатов Task в один рендер шаблона. Это полезно, когда:
- один результат содержит метрики;
- другой результат содержит URL на полный отчет.
Пример:
UI сформирует нагрузку примерно такого вида:
5. Запустите Task и проверьте вкладку Overview
-
Примените
ConfigMapиTaskв ваш кластер. -
Создайте
TaskRunилиPipelineRun, использующийTask, например: -
Дождитесь завершения запуска.
-
Откройте запуск в UI и выберите вкладку Overview.
Если все настроено правильно, вы увидите HTML, созданный вашим шаблоном.
Если
Taskтакже выводитoverview-markdown, вместо шаблона будет показан Markdown.
Советы и соглашения
- Предпочитайте небольшой result с метриками. Рассматривайте результаты как компактную сводку.
- Делайте логику шаблона простой. Сосредоточьтесь на представлении, а не на бизнес-логике. Избегайте тяжелых вычислений в шаблоне.
- Обрабатывайте отсутствие данных defensively. Используйте значения по умолчанию в шаблоне, чтобы отсутствие полей не приводило к сбою отрисовки.
Устранение неполадок
Во вкладке Overview ничего не отображается
- Выводит ли
Taskпустойoverview-markdown?- Если да, UI покажет этот пустой Markdown и проигнорирует шаблоны. Вы можете посмотреть вывод шаблона, просто не записывая ничего в результат
overview-markdown.
- Если да, UI покажет этот пустой Markdown и проигнорирует шаблоны. Вы можете посмотреть вывод шаблона, просто не записывая ничего в результат
- Содержит ли
TaskRunрезультат(ы), перечисленные вoverview-template-result-key?- Проверьте YAML
TaskRunи поле.status.results.
- Проверьте YAML
- Совпадает ли selector в
overview-template-selectorровно с однимConfigMapв namespacekube-public?- Проверьте это командой
kubectl get configmap -l <your-selector> -n kube-public.
- Проверьте это командой
Шаблон отрисовывается, но данные пустые или неверные
- Если вы используете object result, убедитесь, что результат валиден и содержит поля, которые ожидает ваш шаблон.
- Проверьте, что имена в
overview-template-result-keyточно совпадают с именами результатовTask.
Лимиты размера результата или termination message
- Удалите из результатов все необязательные поля.
- Перенесите подробные отчеты по каждому файлу в logs или внешнюю систему, а в результатах оставьте только сводные числа и URLs.
- Помните, что каждый
Taskпо-прежнему использует общий бюджет termination message для всех шагов и результатов. - Изменить лимит результата
Выбран неверный шаблон
- Убедитесь, что
overview-template-selectorдостаточно специфичен (например, включает и имяTask, и версию). - Не используйте одни и те же labels для шаблонов, которые не связаны между собой.
- Если selector соответствует нескольким
ConfigMaps, сделайте labels более строгими, чтобы выбирался только одинConfigMap.
Когда у вас есть ConfigMap шаблона, результаты с метриками и правильные annotations Task, вы можете создавать переиспользуемые, версионируемые макеты обзора Task, не изменяя сам UI.