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