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

    Содержание

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

    Обзор

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

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

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

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

    Обязательная структура репозитория

    catalog-repo/
    ├── README.md              # Root catalog documentation
    ├── OWNERS                 # Catalog maintainers
    ├── task/                  # All Task resources
    │   ├── task-name/         # Task name directory
    │   │   ├── 0.1/           # Version directory
    │   │   │   ├── README.md  # Task documentation
    │   │   │   ├── task-name.yaml  # Task definition
    │   │   │   ├── OWNERS     # Task maintainers
    │   │   │   └── samples/   # Usage examples
    │   │   │       └── run.yaml
    │   │   └── 0.2/           # Next version
    │   └── another-task/
    └── pipeline/              # All Pipeline resources
        └── pipeline-name/
            └── 0.1/
                ├── README.md
                ├── pipeline-name.yaml
                ├── OWNERS
                └── samples/

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

    1. Типы ресурсов: Поддерживаются только каталоги task/ и pipeline/
    2. Версионирование: Каждый ресурс использует semantic versioning (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"  # MUST match directory version exactly

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

    metadata:
      annotations:
        # MANDATORY: Minimum Tekton Pipelines version
        tekton.dev/pipelines.minVersion: "0.17.0"

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

    spec:
      description: "Your resource description here"  # MANDATORY: Cannot be empty

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

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

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

    metadata:
      annotations:
        # Tekton Hub category (choose from standard list)
        tekton.dev/categories: "Build Tools"
    
        # Searchable tags (comma-separated, no spaces after commas)
        tekton.dev/tags: "build,podman,container"
    
        # Human-readable display name
        tekton.dev/displayName: "Podman Build Task"
    
        # Supported platforms (optional)
        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
      # CRITICAL: Required label - MUST match directory version
      labels:
        app.kubernetes.io/version: "0.1"
      annotations:
        # CRITICAL: Required minimum pipelines version
        tekton.dev/pipelines.minVersion: "0.17.0"
        # RECOMMENDED: For better discoverability
        tekton.dev/categories: "CLI"
        tekton.dev/tags: "echo,cli,demo"
        tekton.dev/displayName: "Echo Hello"
        tekton.dev/platforms: "linux/amd64,linux/arm64"
    spec:
      # CRITICAL: Required description field
      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 (имя файла совпадает с именем task).

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

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

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: hello-pipeline
      # CRITICAL: Required label - MUST match directory version
      labels:
        app.kubernetes.io/version: "0.1"
      annotations:
        # CRITICAL: Required minimum pipelines version
        tekton.dev/pipelines.minVersion: "0.17.0"
        # RECOMMENDED: For better discoverability
        tekton.dev/categories: "Integration & Delivery"
        tekton.dev/tags: "demo,pipeline,workflow"
        tekton.dev/displayName: "Hello Pipeline"
        tekton.dev/platforms: "linux/amd64,linux/arm64"
    spec:
      # CRITICAL: Required description field
      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
    
    # Create basic structure
    mkdir -p task pipeline
    touch README.md OWNERS
    
    # Example: Create a task
    mkdir -p task/echo-hello/0.1/samples

    Файл OWNERS в корне

    Определите сопровождающих каталога:

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

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

    Правила semantic versioning

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

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

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

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

    После того как ваш каталог настроен в Tekton Hub, пользователи смогут ссылаться на ваши ресурсы с помощью Hub resolver. Для разных каталогов используются разные конфигурации 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"  # Your catalog name in Hub config
        - name: type
          value: tekton
        - name: kind
          value: task
        - name: name
          value: echo-hello  # Task name
        - name: version
          value: "0.1"       # Task version
      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"  # Your catalog name in Hub config
        - name: type
          value: tekton
        - name: kind
          value: pipeline
        - name: name
          value: hello-pipeline  # Pipeline name
        - name: version
          value: "0.1"           # Pipeline version
      params:
      - name: greeting
        value: "Welcome to Tekton!"
      workspaces:
      - name: shared-data
        emptyDir: {}

    Параметры Hub resolver

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

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

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

    Для настройки и конфигурации Hub resolver см. Конфигурация Hub resolver.

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

    # Using the official Tekton catalog
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: catalog        # Official catalog name
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: git-clone
      - name: version
        value: "0.9"
    # Using a custom organization catalog
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: my-catalog     # Custom catalog name
      - name: type
        value: tekton
      - name: kind
        value: task
      - name: name
        value: custom-build
      - name: version
        value: "0.2"

    Использование Hub resolver в Pipelines

    Вы можете смешивать Tasks из разных каталогов в одном 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:
      # Task from official Tekton catalog
      - 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
    
      # Task from your custom catalog
      - 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, прежде чем пользователи смогут обращаться к нему через resolver.

    Полные инструкции по следующим темам:

    • Добавление вашего каталога в конфигурацию Tekton Hub
    • SSH-аутентификация для private repositories
    • Тестирование и устранение неполадок при интеграции каталога

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

    Контрольный список проверки

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

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

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

    Рекомендуемая проверка

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

    Проверьте свой каталог

    # Check required directory structure
    $ find . -name "*.yaml" -path "*/task/*" -o -path "*/pipeline/*"
    
    # Validate YAML syntax
    $ 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>
    
    # Test critical fields exist
    $ 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

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

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