PAC-резолвер
Это руководство предназначено для обычных пользователей и объясняет, как использовать PAC-резолвер для автоматического разрешения и встраивания задач и pipeline из локальных репозиториев, Tekton Hub и удалённых URL.
В этом руководстве объясняется, как использовать Pipelines as Code (PAC) resolver для автоматического разрешения и встраивания задач и pipeline из трёх источников: локальных задач, определённых в вашем репозитории, удалённых задач из Tekton Hub и задач из удалённых Git-репозиториев или HTTP URL.
Содержание
Предварительные требованияО PAC ResolverПоддерживаемые источникиКак работает PAC ResolverРабочий процесс ResolverПодробный пример: пошаговое разрешениеШаг 1: Исходное определение PipelineRunШаг 2: Контроллер PAC обрабатывает аннотацииШаг 3: PAC встраивает задачу в PipelineRunШаг 4: PipelineRun создан в KubernetesВремя выполнения ResolverПроверка разрешения задачиИспользование локальных задачInline-определение задачи (taskSpec)Ссылка на файлы задач в репозиторииКогда использовать локальные задачиИспользование аннотаций для удалённых задачУдалённые задачи из Tekton HubУдалённые задачи из HTTP URLНесколько аннотаций taskСинтаксис списка задачУказание версии задачиПользовательский URL HubИспользование аннотаций удалённого pipelineКомбинирование удалённых задач и pipelineСравнение с синтаксисом ResolverИспользование аннотаций PAC (рекомендуется)Использование синтаксиса ResolverУстранение неполадокЗадача не найденаРазрешение задачи не выполняетсяЗадача не встроенаСледующие шагиПредварительные требования
- Компонент PAC развернут и запущен
- Настроен CR Repository (см. Руководства)
- Понимание структуры Tekton PipelineRun
О PAC Resolver
PAC Resolver автоматически извлекает и встраивает удалённые задачи и pipeline в ваши определения PipelineRun. Это устраняет необходимость вручную определять задачи или использовать синтаксис resolver в коде pipeline.
Когда PAC разрешает задачу из Tekton Hub:
- PAC извлекает определение задачи (YAML) из Hub
- PAC преобразует
taskRefвtaskSpecи встраивает определение задачи inline в ваш PipelineRun - Встроенная задача становится частью определения PipelineRun
- Задача не должна существовать как отдельный ресурс Task в вашем кластере
Это означает, что вы можете использовать задачи из Tekton Hub без ручного копирования их определений или создания ресурсов Task в вашем кластере.
Поддерживаемые источники
- Локальные задачи: задачи, определённые в вашем Git-репозитории (с использованием
taskSpecили синтаксиса resolver) - Tekton Hub: задачи и pipeline из каталога Tekton Hub
- Удалённые URL: задачи и pipeline из удалённых Git-репозиториев или HTTP URL
Как работает PAC Resolver
Понимание рабочего процесса resolver помогает устранять неполадки и оптимизировать конфигурации pipeline.
Рабочий процесс Resolver
Когда PAC обрабатывает PipelineRun с аннотациями resolver, он выполняет следующие шаги:
- Триггер события: Git-событие (push, pull request и т. д.) запускает контроллер PAC
- Получение Pipeline: контроллер PAC извлекает определение PipelineRun из вашего Git-репозитория
- Обнаружение аннотаций: контроллер PAC сканирует аннотации на наличие директив resolver:
pipelinesascode.tekton.dev/task: "task-name"pipelinesascode.tekton.dev/task-1: "task-name"pipelinesascode.tekton.dev/pipeline: "pipeline-name"
- Разрешение задач: для каждой аннотации task:
- контроллер PAC выполняет запрос к API Tekton Hub (или настроенному URL Hub)
- извлекает определение задачи (YAML)
- проверяет структуру задачи
- Встраивание задачи: PAC встраивает разрешённые определения задач в PipelineRun:
- PAC преобразует
taskRefвtaskSpecи встраивает определение задачи inline в каждую запись task - Встроенная задача становится частью определения PipelineRun, поэтому она не должна существовать как отдельный ресурс Task в кластере
- PAC преобразует
- Создание PipelineRun: PAC создаёт итоговый PipelineRun со встроенными задачами в Kubernetes
- Выполнение: контроллер Tekton Pipeline подхватывает PipelineRun и выполняет его
Подробный пример: пошаговое разрешение
Давайте рассмотрим полный пример, чтобы понять, как работает resolver:
Шаг 1: Исходное определение PipelineRun
Вы определяете PipelineRun в своём репозитории (.tekton/pipelinerun.yaml):
Шаг 2: Контроллер PAC обрабатывает аннотации
Когда происходит событие push, контроллер PAC:
-
Читает PipelineRun из Git: PAC извлекает файл
.tekton/pipelinerun.yamlиз репозитория -
Обнаруживает аннотацию: PAC сканирует аннотации task, например
pipelinesascode.tekton.dev/task: "git-clone" -
Парсит имя и версию задачи:
- Только имя задачи (например,
"git-clone"): извлекает последнюю версию из Hub - С версией (например,
"git-clone:0.1"): извлекает указанную версию - Выбор версии:
- Версия не указана → PAC запрашивает у Hub последнюю стабильную версию
- Версия указана (формат:
task-name:version) → PAC извлекает именно эту версию - Формат версии соответствует semantic versioning (например,
0.1,0.9,1.2.3)
- Только имя задачи (например,
-
Запрашивает API Tekton Hub:
- URL Hub: по умолчанию используется внутренний URL Hub кластера (
http://tekton-hub-api.tekton-pipelines:8000/v1) или публичный Hub (https://api.hub.tekton.dev/v1) - Запрос для последней версии: PAC запрашивает у Hub последнюю доступную версию
- Запрос для конкретной версии: PAC запрашивает точную версию, указанную в аннотации
- Примеры запросов:
- Последняя:
"git-clone"→ Hub возвращает самую новую версию - Конкретная:
"git-clone:0.1"→ Hub возвращает версию 0.1
- Последняя:
- URL Hub: по умолчанию используется внутренний URL Hub кластера (
-
Получает определение задачи из Hub: Hub возвращает полный YAML задачи:
Рекомендации по выбору версии:
- Production-среды: указывайте точные версии (например,
"git-clone:0.1") для воспроизводимости и стабильности - Разработка/тестирование: используйте последнюю версию (без суффикса версии), чтобы автоматически получать новые функции и исправления ошибок
- Фиксация версии: всегда фиксируйте конкретные версии в production, чтобы избежать breaking changes из-за обновлений Hub
- Обновление версий: периодически пересматривайте и обновляйте зафиксированные версии контролируемым образом
Шаг 3: PAC встраивает задачу в PipelineRun
PAC изменяет PipelineRun, преобразуя taskRef в taskSpec и встраивая разрешённое определение задачи:
Шаг 4: PipelineRun создан в Kubernetes
PAC создаёт итоговый PipelineRun в вашем кластере. Вы можете проверить его:
Пример вывода (сокращённый, с показом встроенной задачи):
Время выполнения Resolver
Важно: разрешение задачи происходит до создания PipelineRun в Kubernetes. Это означает, что:
- Задачи разрешаются на этапе определения pipeline, а не во время выполнения
- Если задачу невозможно разрешить, создание PipelineRun завершится ошибкой
- Вы можете проверить разрешение задачи, просмотрев YAML PipelineRun в Kubernetes
- Разрешённые задачи кэшируются PAC для повышения производительности
Проверка разрешения задачи
Чтобы убедиться, что задачи были разрешены корректно:
-
Проверьте PipelineRun в Kubernetes:
Ищите встроенные задачи с taskSpec внутри отдельных задач:
PAC встраивает разрешённые задачи, преобразуя taskRef в taskSpec внутри отдельных задач. Определение задачи встраивается inline как часть PipelineRun в соответствии со стандартным синтаксисом Tekton.
-
Проверьте журналы контроллера PAC:
Пример вывода (с отображением разрешения задачи):
-
Проверьте, что задача указана корректно:
Пример вывода:
-
Проверьте, что PipelineRun был создан успешно:
Пример вывода:
Если разрешение задачи не удалось, PipelineRun может не быть создан, либо для него будет установлено состояние Failed с сообщением об ошибке.
Использование локальных задач
Локальные задачи — это задачи, определённые непосредственно в вашем Git-репозитории. PAC поддерживает два способа использования локальных задач:
Inline-определение задачи (taskSpec)
Вы можете определять задачи непосредственно в PipelineRun с помощью taskSpec:
Как это работает:
- Задачи определяются inline с использованием
taskSpecвнутри каждой задачи в pipeline - Внешнее разрешение не требуется — задачи являются частью определения PipelineRun
- Это удобно для простых задач, специфичных для репозитория
Ссылка на файлы задач в репозитории
Вы можете ссылаться на файлы задач, хранящиеся в вашем репозитории, с помощью аннотаций PAC и специального синтаксиса для задач внутри репозитория.
Важно: для задач в вашем репозитории используйте формат аннотаций pipelinesascode.tekton.dev/task или pipelinesascode.tekton.dev/task-<N>.
Структура репозитория:
Определение PipelineRun с использованием аннотаций PAC:
Как это работает:
- PAC автоматически разрешает и встраивает задачи из вашего репозитория, когда вы используете относительные пути в аннотациях task
- Имя задачи в
taskRef.nameдолжно совпадать с именем задачи, определённым в YAML-файле - Этот способ проще, чем использование синтаксиса
resolver: git, и является рекомендуемым подходом для PAC
Когда использовать локальные задачи
Используйте локальные задачи, когда:
- Задачи специфичны для вашего проекта и не подходят для общего использования
- Вам нужен полный контроль над определениями задач и версиями
- Задачи часто меняются вместе с вашим кодом
- Вы хотите хранить задачи и pipeline вместе в системе контроля версий
Использование аннотаций для удалённых задач
Вы можете использовать аннотации PAC для ссылок на удалённые задачи из Tekton Hub или удалённых HTTP URL. PAC автоматически извлечёт и встроит эти задачи в ваш PipelineRun.
Удалённые задачи из Tekton Hub
Ссылка на одну задачу из Tekton Hub:
Как это работает:
- Аннотация
pipelinesascode.tekton.dev/task: "git-clone"сообщает PAC, что нужно извлечь задачуgit-cloneиз Tekton Hub - PAC автоматически встраивает определение задачи в ваш PipelineRun
- Затем вы можете ссылаться на неё с помощью
taskRef.name: git-clone
Удалённые задачи из HTTP URL
Вы также можете ссылаться на задачи по удалённым HTTP URL:
Как это работает:
- PAC извлекает определение задачи из указанного HTTP URL
- PAC автоматически встраивает задачу в ваш PipelineRun
- Имя задачи в
taskRef.nameдолжно совпадать с именем задачи, определённым в удалённом YAML-файле
Несколько аннотаций task
Ссылайтесь на несколько задач с помощью пронумерованных аннотаций:
Синтаксис списка задач
Вы также можете использовать синтаксис в квадратных скобках, чтобы указать несколько задач в одной аннотации:
Это эквивалентно:
Указание версии задачи
По умолчанию PAC извлекает из Hub последнюю версию задачи. Чтобы указать конкретную версию, используйте формат task-name:version.
PAC разрешает задачи Hub по имени и при необходимости может зафиксировать версию задачи с помощью task-name:version.
Последняя версия (рекомендуется для разработки):
Конкретная версия (рекомендуется для production):
Несколько задач с версиями:
Пользовательский URL Hub
Значение hub-url по умолчанию указывает на внутренний сервис Tekton Hub в namespace по умолчанию (http://tekton-hub-api.tekton-pipelines:8000/v1). Если Tekton Hub развернут в другом namespace, соответствующим образом измените namespace в URL. Если вам нужно использовать другой экземпляр Hub, настройте его в CR OpenShiftPipelinesAsCode:
Примечание: доступ к URL Hub нужен только контроллеру PAC. Если используется внутренний Hub кластера, убедитесь, что контроллер PAC может достичь сервиса Hub.
Использование аннотаций удалённого pipeline
Аннотации удалённого pipeline на практике используются редко. Большинство пользователей определяют pipeline inline с помощью pipelineSpec, а не ссылаются на удалённые pipeline. Этот раздел приведён для полноты.
Вы можете ссылаться на удалённые pipeline из Tekton Hub, хотя это встречается реже, чем использование inline-определений pipeline:
Как это работает:
- Аннотация
pipelinesascode.tekton.dev/pipeline: "pipeline-name"сообщает PAC, что нужно извлечь pipeline из Tekton Hub - PAC автоматически встраивает определение pipeline
- Вы ссылаетесь на него с помощью
pipelineRef.name
Примечание: в большинстве случаев вам следует определять pipeline inline с помощью pipelineSpec в вашем репозитории, а не использовать удалённые pipeline. Это обеспечивает лучший контроль версий и большую прозрачность определений pipeline.
Комбинирование удалённых задач и pipeline
Сравнение с синтаксисом Resolver
Аннотации PAC представляют собой более простой альтернативный вариант синтаксиса resolver Tekton:
Использование аннотаций PAC (рекомендуется)
Использование синтаксиса Resolver
Преимущества аннотаций PAC:
- Более простой синтаксис
- Автоматическое встраивание задач
- Не нужно указывать параметры resolver
- Бесшовная работа с разрешением задач PAC
Устранение неполадок
Задача не найдена
-
Проверьте имя задачи: убедитесь, что имя задачи в Tekton Hub указано правильно
-
Проверьте URL Hub: убедитесь, что URL Hub настроен корректно
-
Проверьте журналы PAC:
Пример вывода:
Разрешение задачи не выполняется
-
Проверьте сетевое соединение: убедитесь, что контроллер PAC может достичь Tekton Hub
Пример вывода (если доступно):
-
Проверьте конфигурацию Hub: проверьте настройку
hub-urlв CROpenShiftPipelinesAsCode
Пример вывода:
-
Проверьте версию задачи: убедитесь, что указанная версия существует
Пример вывода (сокращённый):
Задача не встроена
- Проверьте синтаксис аннотаций: убедитесь, что ключ и значение аннотации указаны в правильном формате
- Проверьте PipelineRun: убедитесь, что
taskRef.nameсовпадает с именем задачи в аннотации - Проверьте журналы контроллера PAC на наличие ошибок встраивания
Следующие шаги
- Определение PipelineRun в Git - файлы PipelineRun и аннотации триггеров
- Расширенная конфигурация репозитория - расширенные настройки CR Repository
- Управление PipelineRun - управление PipelineRun
- Распространённые проблемы - руководство по устранению неполадок