• Русский
  • Создание пользовательского каталога

    Содержание

    ОбзорСтруктура каталогаТребуемая структура репозиторияОсновные правила структурыТребования к валидации в Tekton HubКритические требования (ресурс игнорируется при отсутствии)1. Обязательная метка2. Обязательные аннотации3. Обязательное поле spec4. Правило именования файлаРекомендуемые аннотации (улучшают обнаруживаемость)Стандартные категорииПолный пример TaskПолный пример PipelineНастройка вашего репозиторияИнициализация структуры репозиторияКорневой файл OWNERSУправление версиямиПравила семантического версионированияУправление версиямиИспользование ресурсов из каталоговИспользование Hub Resolver для TasksИспользование Hub Resolver для PipelinesПараметры Hub ResolverПример: разные каталогиИспользование Hub Resolver в PipelineСледующие шаги: добавление в Tekton HubКонтрольный список валидацииКритическая валидация (обязательно пройти)Рекомендуемая валидацияТестирование вашего каталогаПубликация вашего каталогаСледующие шаги

    Обзор

    В этом руководстве показано, как создать репозиторий каталога с ресурсами Tekton (Tasks, Pipelines). Вы узнаете структуру, стандарты метаданных и требования к валидации, которые обеспечивают корректную работу ваших ресурсов с Tekton Hub.

    Для настройки существующего каталога в Tekton Hub смотрите Добавление пользовательских каталогов.

    Структура каталога

    Все каталоги Tekton должны соответствовать Tekton Catalog Organization Standard. Этот стандарт обеспечивает согласованность и совместимость с Tekton Hub.

    Требуемая структура репозитория

    catalog-repo/
    ├── README.md              # Документация корневого каталога
    ├── OWNERS                 # Ответственные за каталог
    ├── task/                  # Все ресурсы Task
    │   ├── task-name/         # Каталог с именем задачи
    │   │   ├── 0.1/           # Каталог версии
    │   │   │   ├── README.md  # Документация задачи
    │   │   │   ├── task-name.yaml  # Определение задачи
    │   │   │   ├── OWNERS     # Ответственные за задачу
    │   │   │   └── samples/   # Примеры использования
    │   │   │       └── run.yaml
    │   │   └── 0.2/           # Следующая версия
    │   └── another-task/
    └── pipeline/              # Все ресурсы Pipeline
        └── pipeline-name/
            └── 0.1/
                ├── README.md
                ├── pipeline-name.yaml
                ├── OWNERS
                └── samples/

    Основные правила структуры

    1. Типы ресурсов: поддерживаются только каталоги task/ и pipeline/
    2. Версионирование: каждый ресурс использует семантическое версионирование (0.1, 0.2, 1.0)
    3. Несколько версий: разные версии сосуществуют в отдельных каталогах
    4. Обязательные файлы: каждая версия должна содержать определение в формате YAML. README и OWNERS — необязательны, но рекомендуются.
    5. Опциональные примеры: каталог samples/ для примеров использования

    Требования к валидации в Tekton Hub

    Tekton Hub предъявляет строгие правила валидации, определяющие, будут ли ваши ресурсы отображаться. Ресурсы, не прошедшие валидацию, полностью игнорируются.

    Критические требования (ресурс игнорируется при отсутствии)

    Эти поля абсолютно обязательны — отсутствие любого из них приведёт к полному игнорированию ресурса:

    1. Обязательная метка

    metadata:
      labels:
        app.kubernetes.io/version: "0.1"  # ДОЛЖНО точно совпадать с версией каталога

    2. Обязательные аннотации

    metadata:
      annotations:
        # ОБЯЗАТЕЛЬНО: минимальная версия Tekton Pipelines
        tekton.dev/pipelines.minVersion: "0.17.0"

    3. Обязательное поле spec

    spec:
      description: "Описание вашего ресурса"  # ОБЯЗАТЕЛЬНО: не может быть пустым

    4. Правило именования файла

    • Имя файла YAML ДОЛЖНО совпадать с именем ресурса
    • Пример: Task с именем build-image → файл должен называться build-image.yaml
    • Шаблон: task/<name>/<version>/<name>.yaml или pipeline/<name>/<version>/<name>.yaml

    Рекомендуемые аннотации (улучшают обнаруживаемость)

    metadata:
      annotations:
        # Категория Tekton Hub (выберите из стандартного списка)
        tekton.dev/categories: "Build Tools"
    
        # Теги для поиска (через запятую, без пробелов после запятых)
        tekton.dev/tags: "build,podman,container"
    
        # Читаемое имя для отображения
        tekton.dev/displayName: "Podman Build Task"
    
        # Поддерживаемые платформы (опционально)
        tekton.dev/platforms: "linux/amd64,linux/arm64"

    Стандартные категории

    Выбирайте из этих стандартных категорий Tekton Hub:

    • Automation, Build Tools, CLI, Cloud
    • Code Quality, Continuous Integration
    • Deployment, Developer Tools
    • Image Build, Integration & Delivery
    • Git, Kubernetes, Messaging
    • Monitoring, Networking, Publishing
    • Security, Storage, Testing

    Важно: Ресурсы с категориями, не настроенными в вашей инстанции Tekton Hub, не будут отображаться, даже если используются корректные имена категорий. Инструкции по добавлению пользовательских категорий в ваш Hub смотрите в разделе Настройка категорий.

    Полный пример Task

    Ниже приведён полный пример Task с всеми обязательными и рекомендуемыми полями:

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: echo-hello
      # КРИТИЧНО: обязательная метка - ДОЛЖНА совпадать с версией каталога
      labels:
        app.kubernetes.io/version: "0.1"
      annotations:
        # КРИТИЧНО: обязательная минимальная версия pipelines
        tekton.dev/pipelines.minVersion: "0.17.0"
        # РЕКОМЕНДУЕТСЯ: для лучшей обнаруживаемости
        tekton.dev/categories: "CLI"
        tekton.dev/tags: "echo,cli,demo"
        tekton.dev/displayName: "Echo Hello"
        tekton.dev/platforms: "linux/amd64,linux/arm64"
    spec:
      # КРИТИЧНО: обязательное поле описания
      description: Simple demonstration Task that echoes a greeting message
      params:
      - name: message
        description: Message to echo
        default: "Hello World"
      results:
      - name: greeting
        description: The echoed greeting
      steps:
      - name: echo-message
        image: alpine:3.18
        script: |
          #!/bin/sh
          echo "$(params.message)"
          echo -n "$(params.message)" | tee $(results.greeting.path)

    Важно: Этот файл должен быть сохранён как task/echo-hello/0.1/echo-hello.yaml (имя файла совпадает с именем задачи).

    Полный пример Pipeline

    Ниже приведён полный пример Pipeline с всеми обязательными и рекомендуемыми полями:

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: hello-pipeline
      # КРИТИЧНО: обязательная метка - ДОЛЖНА совпадать с версией каталога
      labels:
        app.kubernetes.io/version: "0.1"
      annotations:
        # КРИТИЧНО: обязательная минимальная версия pipelines
        tekton.dev/pipelines.minVersion: "0.17.0"
        # РЕКОМЕНДУЕТСЯ: для лучшей обнаруживаемости
        tekton.dev/categories: "Integration & Delivery"
        tekton.dev/tags: "demo,pipeline,workflow"
        tekton.dev/displayName: "Hello Pipeline"
        tekton.dev/platforms: "linux/amd64,linux/arm64"
    spec:
      # КРИТИЧНО: обязательное поле описания
      description: Simple demonstration Pipeline showing task orchestration
      params:
      - name: greeting
        description: Greeting message
        default: "Hello from Pipeline"
      workspaces:
      - name: shared-data
        description: Workspace for sharing data between tasks
      tasks:
      - name: say-hello
        taskRef:
          name: echo-hello
        params:
        - name: message
          value: "$(params.greeting)"
      - name: say-goodbye
        taskRef:
          name: echo-hello
        params:
        - name: message
          value: "Goodbye from $(tasks.say-hello.results.greeting)"
        runAfter:
        - say-hello

    Важно: Этот файл должен быть сохранён как pipeline/hello-pipeline/0.1/hello-pipeline.yaml (имя файла совпадает с именем pipeline).

    Настройка вашего репозитория

    Инициализация структуры репозитория

    mkdir my-tekton-catalog
    cd my-tekton-catalog
    git init
    
    # Создание базовой структуры
    mkdir -p task pipeline
    touch README.md OWNERS
    
    # Пример: создание задачи
    mkdir -p task/echo-hello/0.1/samples

    Корневой файл OWNERS

    Определите ответственных за каталог:

    approvers:
      - your-github-username
    reviewers:
      - team-member-username

    Управление версиями

    Правила семантического версионирования

    • 0.1 → 0.2: исправления ошибок, улучшения
    • 0.x → 1.0: новые функции, стабильный релиз
    • 1.x → 2.0: несовместимые изменения

    Управление версиями

    • Каждая версия располагается в отдельном каталоге
    • Несколько версий сосуществуют
    • Несовместимые изменения документируются в README

    Использование ресурсов из каталогов

    После настройки вашего каталога в Tekton Hub пользователи могут ссылаться на ваши ресурсы с помощью Hub resolver. Разные каталоги имеют разные настройки резолвера.

    Использование Hub Resolver для Tasks

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: test-echo-hello
    spec:
      taskRef:
        resolver: hub
        params:
        - name: catalog
          value: "my-custom-catalog"  # Имя вашего каталога в конфигурации Hub
        - name: type
          value: tekton
        - name: kind
          value: task
        - name: name
          value: echo-hello  # Имя задачи
        - name: version
          value: "0.1"       # Версия задачи
      params:
      - name: message
        value: "Hello from my catalog!"

    Использование Hub Resolver для Pipelines

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: test-hello-pipeline
    spec:
      pipelineRef:
        resolver: hub
        params:
        - name: catalog
          value: "my-custom-catalog"  # Имя вашего каталога в конфигурации Hub
        - name: type
          value: tekton
        - name: kind
          value: pipeline
        - name: name
          value: hello-pipeline  # Имя pipeline
        - name: version
          value: "0.1"           # Версия pipeline
      params:
      - name: greeting
        value: "Welcome to Tekton!"
      workspaces:
      - name: shared-data
        emptyDir: {}

    Параметры Hub Resolver

    Резолвер Hub поддерживает следующие параметры:

    ПараметрОбязательныйОписаниеЗначение по умолчаниюПримеры значений
    nameДаИмя задачи или pipeline для загрузки из хаба-echo-hello, build-image
    catalogНетКаталог, из которого загружается ресурсtekton-catalog-tasks (для задач)
    tekton-catalog-pipelines (для pipeline)
    tekton, my-catalog
    typeНетТип хаба, из которого загружается ресурсartifactartifact, tekton
    kindНетТип ресурсаtasktask, pipeline
    versionНетВерсия или ограничение версии ресурсаПоследняя"0.1", ">=0.5.0"

    Примечание: Для пользовательских каталогов обычно необходимо явно указывать параметры catalog и type: tekton.

    Для настройки и конфигурации резолвера Hub смотрите Настройка Hub Resolver.

    Пример: разные каталоги

    # Использование официального каталога Tekton
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: catalog        # Имя официального каталога
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: git-clone
      - name: version
        value: "0.9"
    # Использование пользовательского каталога организации
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: my-catalog     # Имя пользовательского каталога
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: custom-build
      - name: version
        value: "0.2"

    Использование Hub Resolver в Pipeline

    Вы можете комбинировать задачи из разных каталогов в одном Pipeline:

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: multi-catalog-pipeline
    spec:
      description: Pipeline using tasks from multiple catalogs
      workspaces:
      - name: source
        description: Source code workspace
      tasks:
      # Задача из официального каталога Tekton
      - name: git-clone
        taskRef:
          resolver: hub
          params:
          - name: catalog
            value: catalog
          - name: type
            value: tekton
          - name: kind
            value: task
          - name: name
            value: git-clone
          - name: version
            value: "0.9"
        workspaces:
        - name: output
          workspace: source
    
      # Задача из вашего пользовательского каталога
      - name: custom-build
        taskRef:
          resolver: hub
          params:
          - name: catalog
            value: my-custom-catalog
          - name: type
            value: tekton
          - name: kind
            value: task
          - name: name
            value: echo-hello
          - name: version
            value: "0.1"
        runAfter:
        - git-clone
        params:
        - name: message
          value: "Build completed!"

    Следующие шаги: добавление в Tekton Hub

    После подготовки репозитория каталога его необходимо настроить в Tekton Hub, чтобы пользователи могли получить доступ к нему через резолвер.

    Для полного руководства по:

    • Добавлению каталога в конфигурацию Tekton Hub
    • Аутентификации SSH для приватных репозиториев
    • Тестированию и устранению неполадок интеграции каталога

    Смотрите Добавление пользовательских каталогов.

    Контрольный список валидации

    Перед публикацией каталога убедитесь, что каждый ресурс соответствует всем требованиям Tekton Hub:

    Критическая валидация (обязательно пройти)

    • Именование файлов: строго по шаблону task/<name>/<version>/<name>.yaml
    • Метка версии: app.kubernetes.io/version: "0.1" совпадает с версией каталога
    • Аннотация MinVersion: tekton.dev/pipelines.minVersion: "0.17.0" присутствует
    • Поле описания: spec.description: "..." не пустое
    • Синтаксис YAML: ресурс проходит валидацию с помощью kubectl apply --dry-run

    Рекомендуемая валидация

    • Отображаемое имя: указано tekton.dev/displayName для улучшения UX
    • Категории: валидная категория из стандартного списка
    • Теги: описательные, через запятую без пробелов после запятых
    • Документация: полный README.md для каждого ресурса
    • Примеры: рабочие примеры в samples/run.yaml

    Тестирование вашего каталога

    # Проверка требуемой структуры каталогов
    $ find . -name "*.yaml" -path "*/task/*" -o -path "*/pipeline/*"
    
    # Проверка синтаксиса YAML
    $ kubectl apply --dry-run=client -f <task/echo-hello/0.1/echo-hello.yaml>
    $ kubectl apply --dry-run=client -f <pipeline/hello-pipeline/0.1/hello-pipeline.yaml>
    
    # Проверка наличия критичных полей
    $ grep -r "app.kubernetes.io/version" task/ pipeline/
    $ grep -r "tekton.dev/pipelines.minVersion" task/ pipeline/
    $ grep -r "description:" task/ pipeline/

    Публикация вашего каталога

    1. Отправьте в репозиторий Git (GitHub, GitLab и т.д.)
    2. Тестируйте локально — проверьте структуру и синтаксис YAML
    3. Добавьте в Tekton Hub — смотрите Добавление пользовательских каталогов
    4. Поделитесь с командой — ваши ресурсы теперь доступны через Hub resolver

    Следующие шаги

    Теперь, когда вы знакомы со структурой и стандартами каталога, углубитесь в разработку ресурсов: