Настройка сводки 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. Добавьте аннотации к Task, чтобы связать его с шаблоном5. Запустите Task и проверьте вкладку OverviewСоветы и соглашенияУстранение неполадокВо вкладке Overview ничего не отображаетсяШаблон рендерится, но данные пустые или неправильныеОграничения на размер результата или termination messageВыбран неправильный шаблонПредварительные требования
- Установленный Tekton Pipelines в вашем кластере.
- Права на создание ConfigMaps в общей пространстве шаблонов
kube-public.
Как это работает
- Ваш
Taskвыводит один или несколько результатов, содержащих метрики или сводные данные. - Метаданные вашего
Taskвключают аннотации, которые сообщают UI:- Какой ConfigMap следует использовать в качестве шаблона (через селектор label).
- Какие результаты
Taskнужно прочитать и передать в шаблон.
- UI:
- Проверяет, есть ли у
TaskRunрезультат с именемoverview-markdown. Если да, он отображает этот Markdown и останавливается. - В противном случае читает аннотации шаблона из
TaskRun. - Находит соответствующий ConfigMap и загружает
template.ejs. - Читает объявленные результаты из
TaskRunи объединяет их в один JSON payload. - Вычисляет шаблон EJS с этим payload и отображает сгенерированный 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
Определите result в вашем Task, который будет содержать метрики, используемые шаблоном.
Пример Task:
Рекомендации:
- Делайте результат небольшим и плоским. Используйте простые поля, такие как количество, проценты, статус и URL.
- Не включайте большие текстовые блоки.
- Если используете result типа object, убедитесь, что шаг записывает валидный JSON (без завершающих запятых, с корректным экранированием кавычек).
4. Добавьте аннотации к Task, чтобы связать его с шаблоном
Используйте аннотации в Task, чтобы сообщить UI, какой шаблон использовать и какие результаты передать в него.
Пример для одного результата:
Концептуально UI сформирует payload примерно такого вида:
Затем он вычислит template.ejs с этим payload, чтобы вы могли использовать metrics.total, metrics.status и так далее.
Вы можете объединить несколько результатов Task в один рендеринг шаблона. Это полезно, когда:
- Один результат содержит метрики.
- Другой результат содержит URL полного отчета.
Пример:
UI сформирует payload, похожий на следующий:
5. Запустите Task и проверьте вкладку Overview
-
Примените
ConfigMapиTaskв ваш кластер. -
Создайте
TaskRunилиPipelineRun, который использует этотTask, например: -
Дождитесь завершения запуска.
-
Откройте запуск в UI и выберите вкладку Overview.
Если все настроено правильно, вы увидите HTML, сгенерированный вашим шаблоном.
Если
Taskтакже выводитoverview-markdown, вместо шаблона будет показан Markdown.
Советы и соглашения
- Предпочитайте небольшой result с метриками. Рассматривайте результаты как компактную сводку.
- Делайте логику шаблона простой. Сосредоточьтесь на представлении, а не на бизнес-логике. Избегайте тяжелых вычислений в шаблоне.
- Защищайтесь от отсутствующих данных. Используйте значения по умолчанию в шаблоне, чтобы отсутствующие поля не приводили к сбою рендеринга.
Устранение неполадок
Во вкладке Overview ничего не отображается
- Выводит ли
Taskпустойoverview-markdown?- Если да, UI покажет этот пустой Markdown и проигнорирует шаблоны. Вы можете увидеть вывод шаблона, просто ничего не записывая в результат
overview-markdown.
- Если да, UI покажет этот пустой Markdown и проигнорирует шаблоны. Вы можете увидеть вывод шаблона, просто ничего не записывая в результат
- Содержит ли
TaskRunрезультат(ы), перечисленные вoverview-template-result-key?- Проверьте YAML
TaskRunи.status.results.
- Проверьте YAML
- Совпадает ли селектор в
overview-template-selectorровно с однимConfigMapв namespacekube-public?- Проверьте это с помощью
kubectl get configmap -l <your-selector> -n kube-public.
- Проверьте это с помощью
Шаблон рендерится, но данные пустые или неправильные
- Если вы используете result типа object, убедитесь, что результат валиден и содержит поля, которые ожидает ваш шаблон.
- Проверьте, что имена в
overview-template-result-keyточно совпадают с именами результатовTask.
Ограничения на размер результата или termination message
- Удалите из результатов несущественные поля.
- Перенесите подробные отчеты по каждому файлу в логи или внешнюю систему, а в результатах оставляйте только итоговые числа и URL.
- Помните, что каждый
Taskпо-прежнему использует единый бюджет termination-message для всех шагов и результатов. - Modify result limit
Выбран неправильный шаблон
- Убедитесь, что
overview-template-selectorдостаточно специфичен (например, включает и имяTask, и версию). - Не используйте одни и те же labels для несвязанных шаблонов.
- Если селектору соответствуют несколько
ConfigMaps, уточните labels так, чтобы выбирался только одинConfigMap.
Как только у вас будут ConfigMap шаблона, результаты с метриками и правильные аннотации Task, вы сможете создавать повторно используемые, версионируемые макеты сводки Task без изменения самого UI.