• Русский
  • Управление компонентом PAC

    Только для администраторов

    Это руководство предназначено только для администраторов кластера. В нем описываются задачи по развертыванию, настройке и обслуживанию компонента PAC, требующие прав администратора кластера.

    Обычным пользователям следует обратиться к:

    В этом руководстве объясняется, как развернуть, обновить и удалить компонент Pipelines-as-Code (PAC) на платформах Kubernetes.

    Содержание

    Предварительные требованияРазвертывание компонента PACРазвертывание компонента PACШаг 1: Создайте CR OpenShiftPipelinesAsCodeШаг 2: Примените конфигурациюШаг 3: Проверьте развертываниеНастройка доступаИспользование Ingress (HTTP)Использование Ingress (HTTPS)Использование NodePortКак получить URL контроллера PACЕсли используется IngressЕсли используется NodePortАвтоматическое определение с помощью tkn pacНастройки конфигурацииОбновление компонента PACОбновление конфигурацииОбновление версии компонентаПроверка обновленийОткат конфигурацииЧастые обновления конфигурацииИзменение имени приложенияВключение обнаружения ошибокОбновление URL HubОтключение удаленных задачНастройка ссылок кастомной консолиУдаление компонента PACУдаление CR OpenShiftPipelinesAsCodeШаг 1: Удалите CRШаг 2: Проверьте удалениеОчистка дополнительных ресурсовУдаление CR репозиториевУдаление секретовУдаление Ingress/ServiceУстранение неполадокПоды PAC не запускаютсяCR OpenShiftPipelinesAsCode не готовПроблемы с TektonInstallerSetCR не удаляетсяРесурсы не удаляютсяСледующие шаги

    Предварительные требования

    Перед управлением PAC убедитесь, что у вас есть:

    • Kubernetes кластер (версия 1.24 или выше)
    • Установленный и запущенный Tekton Operator
    • Права администратора кластера
    • Установленный и настроенный kubectl для доступа к вашему кластеру

    Развертывание компонента PAC

    NOTE

    Поддержка платформы: Несмотря на то, что имя ресурса содержит "OpenShift", PAC можно развернуть на платформах Kubernetes с помощью патча Tekton Operator, который добавляет поддержку контроллера PAC.

    PAC разворачивается путем прямого создания CR OpenShiftPipelinesAsCode. Оператор автоматически создаст и будет управлять всеми необходимыми ресурсами для PAC.

    Развертывание компонента PAC

    Шаг 1: Создайте CR OpenShiftPipelinesAsCode

    Создайте YAML-файл с именем pac.yaml:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: OpenShiftPipelinesAsCode
    metadata:
      name: pipelines-as-code
    spec:
      settings:
        application-name: Pipelines as Code CI
        hub-url: http://tekton-hub-api.tekton-pipelines:8000/v1
        remote-tasks: "true"
        secret-auto-create: "true"
      targetNamespace: tekton-pipelines  # Пространство имен по умолчанию, можно настроить

    Важно:

    • Имя ресурса должно быть pipelines-as-code, иначе оператор не развернет компонент PAC.
    • Поле targetNamespace указывает, в каком пространстве имен будут развернуты компоненты PAC. По умолчанию это tekton-pipelines, но можно использовать любое имя пространства имен.

    Создайте пространство имен, если его нет:

    kubectl create namespace tekton-pipelines  # Или ваше пользовательское имя пространства имен

    Шаг 2: Примените конфигурацию

    Примените CR в ваш кластер:

    kubectl apply -f pac.yaml

    Пример вывода:

    openshiftpipelinesascode.operator.tekton.dev/pipelines-as-code created

    Шаг 3: Проверьте развертывание

    Проверьте статус CR OpenShiftPipelinesAsCode:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev

    В выводе должен отображаться CR со статусом Ready:

    NAME                  VERSION   READY   REASON
    pipelines-as-code    0.x.x     True    Ready

    Проверьте статус TektonInstallerSet (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    kubectl get tektoninstallersets -n <pac-namespace> | grep pipelinesascode

    Пример вывода:

    NAME                              READY   REASON
    pipelinesascode-installer-set     True    Ready
    Понимание TektonInstallerSet

    TektonInstallerSet — это внутренний ресурс оператора, используемый Tekton Operator для управления установкой и жизненным циклом компонента PAC. Он служит шаблоном, который оператор использует для создания и управления всеми ресурсами, связанными с PAC (Deployment, Service, ConfigMap, RBAC и т.д.).

    Важно:

    • Никогда не создавайте, не изменяйте и не удаляйте TektonInstallerSet напрямую
    • Оператор автоматически создает и управляет им при создании CR OpenShiftPipelinesAsCode
    • Вы можете проверять его статус для устранения неполадок, но все изменения должны вноситься через CR OpenShiftPipelinesAsCode
    • При удалении CR OpenShiftPipelinesAsCode оператор автоматически удалит TektonInstallerSet и все связанные ресурсы

    Пример вывода:

    NAME                              AGE
    pipelines-as-code-installer-set   5m

    Проверьте, что поды PAC запущены:

    kubectl get pods -n <pac-namespace> | grep pipelines-as-code

    Пример вывода:

    NAME                                      READY   STATUS    RESTARTS   AGE
    pipelines-as-code-controller-xxxxx        1/1     Running   0          5m
    pipelines-as-code-watcher-xxxxx          1/1     Running   0          5m
    pipelines-as-code-webhook-xxxxx          1/1     Running   0          5m

    Примечание: В этом документе <pac-namespace> или tekton-pipelines означает пространство имен, в котором развернут PAC. Замените его на ваше фактическое имя пространства имен, если оно отличается.

    Вы должны увидеть три пода в состоянии Running:

    • pipelines-as-code-controller-*
    • pipelines-as-code-watcher-*
    • pipelines-as-code-webhook-*

    Настройка доступа

    Компонент PAC должен быть доступен, чтобы события webhook от Git-провайдеров могли достигать его. URL контроллера PAC используется при настройке webhook в вашем Git-провайдере.

    Важно: Перед настройкой репозиториев необходимо открыть доступ к контроллеру PAC одним из описанных ниже способов. Команда tkn pac create repo может автоматически определить URL контроллера, если он открыт через Ingress, но сначала его нужно настроить.

    Вы можете использовать один из следующих способов для открытия доступа к контроллеру PAC:

    Использование Ingress (HTTP)

    Имя домена и настройка DNS

    Если у вас есть доменное имя:

    • Укажите поле host с вашим доменным именем (например, pac.example.com)
    • Убедитесь, что доменное имя разрешается через DNS в IP-адрес вашего Ingress Controller
    • Настройте DNS-запись типа A: pac.example.com<Ingress-Controller-IP>

    Если доменного имени нет:

    • Оставьте поле host пустым или удалите строку host из конфигурации Ingress
    • Доступ к PAC будет осуществляться по IP-адресу и порту: http://<Ingress-Controller-IP>:<port>
    • Git-провайдеры (GitLab, GitHub) могут отправлять webhook на IP-адрес

    Создайте IngressClass (если еще не создан):

    Создайте ресурс Ingress (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: pipelines-as-code
      namespace: <pac-namespace>  # По умолчанию: tekton-pipelines
    spec:
      rules:
      - host: pac.example.com
        http:
          paths:
          - backend:
              service:
                name: pipelines-as-code-controller
                port:
                  number: 8080
            path: /
            pathType: Prefix

    Примените Ingress:

    kubectl apply -f ingress.yaml

    Пример вывода:

    ingress.networking.k8s.io/pipelines-as-code created

    Альтернатива: Ingress без доменного имени (без host)

    Если у вас нет доменного имени, можно создать Ingress без поля host:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: pipelines-as-code
      namespace: <pac-namespace>  # По умолчанию: tekton-pipelines
    spec:
      rules:
      - http:  # Поле host не указано
          paths:
          - backend:
              service:
                name: pipelines-as-code-controller
                port:
                  number: 8080
            path: /
            pathType: Prefix

    Затем доступ к PAC осуществляется по IP-адресу Ingress Controller:

    # Получить IP Ingress Controller
    kubectl get ingress pipelines-as-code -n <pac-namespace>
    
    # Доступ к PAC
    # http://<INGRESS-IP>/
    # Пример: http://192.168.1.100/

    Использование Ingress (HTTPS)

    Требования к настройке HTTPS

    Требования к TLS-сертификату:

    • Необходим действительный TLS-сертификат для вашего доменного имени
    • Общий имя (CN) или альтернативное имя субъекта (SAN) сертификата должно совпадать с вашим доменом
    • Для продакшена используйте сертификаты от доверенных CA (Let's Encrypt, DigiCert и др.)

    Настройка доменного имени:

    • HTTPS Ingress требует указания доменного имени в поле host
    • Убедитесь в разрешении DNS: pac.example.com<Ingress-Controller-IP>
    • Доступ по IP с HTTPS может вызвать ошибки проверки сертификата

    Сначала создайте TLS Secret (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    apiVersion: v1
    kind: Secret
    metadata:
      name: pipelines-as-code-tls
      namespace: <pac-namespace>  # По умолчанию: tekton-pipelines
    type: kubernetes.io/tls
    data:
      tls.crt: <base64-encoded-tls-certificate>
      tls.key: <base64-encoded-tls-key>

    Затем создайте HTTPS Ingress (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: pipelines-as-code
      namespace: <pac-namespace>  # По умолчанию: tekton-pipelines
    spec:
      rules:
      - host: pac.example.com
        http:
          paths:
          - backend:
              service:
                name: pipelines-as-code-controller
                port:
                  number: 8080
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - pac.example.com
        secretName: pipelines-as-code-tls

    Использование NodePort

    Создайте Service типа NodePort (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    apiVersion: v1
    kind: Service
    metadata:
      name: pipelines-as-code-controller-nodeport
      namespace: <pac-namespace>  # По умолчанию: tekton-pipelines
    spec:
      ports:
        - name: http-listener
          port: 8080
          protocol: TCP
          targetPort: 8082  # Контроллер PAC слушает порт 8082
          nodePort: 30080  # Опционально: указать фиксированный NodePort
      selector:
        app.kubernetes.io/part-of: pipelines-as-code
        app.kubernetes.io/component: controller
      type: NodePort

    Важно:

    • targetPort должен быть 8082 — порт, на котором под контроллера PAC слушает события webhook
    • port (8080) — порт сервиса (используется для внутреннего общения в кластере)
    • nodePort (30080) — внешний порт, доступный извне кластера
    • Для Ingress порт сервиса 8080 маршрутизируется внутрь на порт 8082 контроллера

    Получите NodePort (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    kubectl get service -n <pac-namespace> pipelines-as-code-controller-nodeport -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}'

    Пример вывода:

    30080

    Доступ к PAC осуществляется по адресу http://<node-ip>:<node-port>.

    Как получить URL контроллера PAC

    После открытия доступа к контроллеру PAC вы можете получить URL следующими способами:

    Если используется Ingress

    Получите host Ingress (замените <pac-namespace> на ваше пространство имен PAC, по умолчанию tekton-pipelines):

    kubectl get ingress pipelines-as-code -n <pac-namespace> -o jsonpath='{.spec.rules[0].host}'

    Пример вывода:

    pac.example.com

    URL контроллера будет:

    • HTTP: http://<ingress-host>
    • HTTPS: https://<ingress-host>

    Если используется NodePort

    Получите NodePort и IP ноды:

    # Установите ваше пространство имен PAC (по умолчанию: tekton-pipelines)
    PAC_NAMESPACE="tekton-pipelines"
    
    # Получить NodePort
    NODEPORT=$(kubectl get service -n ${PAC_NAMESPACE} pipelines-as-code-controller-nodeport -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}')
    
    # Получить IP ноды (используется внутренний IP первой ноды)
    NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
    
    echo "PAC Controller URL: http://${NODE_IP}:${NODEPORT}"

    Пример вывода:

    PAC Controller URL: http://192.168.1.100:30080

    Автоматическое определение с помощью tkn pac

    При использовании tkn pac create repo CLI автоматически определяет URL контроллера, проверяя:

    1. Наличие Ingress ресурсов, указывающих на сервис контроллера PAC
    2. Наличие сервисов LoadBalancer
    3. Наличие сервисов NodePort
    4. Если ничего не найдено, CLI запросит URL вручную

    Если автоматическое определение не удалось, вы можете ввести URL контроллера вручную при запросе.

    Для обычных пользователей

    Если вы обычный пользователь и хотите узнать URL контроллера PAC:

    1. Попробуйте выполнить команды выше (если у вас есть доступ к кластеру)
    2. Если команды не работают или у вас нет прав, обратитесь к администратору PAC для получения URL
    3. Администратор может найти URL, используя методы из этого раздела

    Примечание: URL контроллера должен быть доступен с серверов Git-провайдера для получения событий webhook.

    Настройки конфигурации

    Вы можете настроить поведение PAC через поле settings в CR OpenShiftPipelinesAsCode:

    НастройкаОписаниеЗначение по умолчанию
    application-nameИмя, отображаемое в UI Git-провайдераPipelines as Code CI
    hub-urlURL API Tekton Hubhttp://tekton-hub-api.tekton-pipelines:8000/v1 (внутрикластерный, namespace по умолчанию)
    remote-tasksВключить разрешение удаленных задачtrue
    secret-auto-createАвтоматическое создание секретовtrue
    error-detection-from-container-logsОбнаружение ошибок из логов контейнеровfalse
    error-log-snippetПоказать фрагменты логов с ошибкамиtrue
    custom-console-nameОтображаемое имя для ссылок на кастомную консоль в UI Git-провайдера`` (пусто)
    custom-console-urlБазовый URL кастомной консоли (например, OpenShift Console)`` (пусто)
    custom-console-url-pr-detailsШаблон URL для страницы деталей PR/MR. Поддерживает переменные: {{namespace}}, {{pipelinerun}}`` (пусто)
    custom-console-url-pr-tasklogШаблон URL для страницы логов задач PR/MR. Поддерживает переменные: {{namespace}}, {{pipelinerun}}, {{taskrun}}`` (пусто)
    custom-console-url-namespaceШаблон URL для страницы пространства имен. Поддерживает переменную: {{namespace}}`` (пусто)

    Примечание по hub-url:

    • Значение по умолчанию указывает на внутренний сервис Tekton Hub в namespace по умолчанию (tekton-pipelines)
    • Формат: http://<service-name>.<namespace>:<port>/v1
    • Если Tekton Hub развернут в другом namespace, скорректируйте namespace в URL соответственно
    • Namespace в hub-url — это namespace, где развернут Tekton Hub, он может отличаться от namespace PAC (указан в targetNamespace)
    • Для использования внешнего Hub (например, публичного Tekton Hub) установите https://api.hub.tekton.dev/v1
    • Только контроллер PAC должен иметь доступ к этому URL

    Примечание по custom-console-name и custom-console-url:

    • Эти настройки используются для конфигурации кастомных ссылок консоли в UI Git-провайдера
    • custom-console-name — отображаемое имя для кастомных ссылок консоли
    • custom-console-url — базовый URL кастомной консоли (например, Devops Console)
    • custom-console-url-pr-details — шаблон URL для страницы деталей PR/MR. Поддерживает переменные: {{namespace}}, {{pipelinerun}}
    • custom-console-url-pr-tasklog — шаблон URL для страницы логов задач PR/MR. Поддерживает переменные: {{namespace}}, {{pipelinerun}}, {{taskrun}}
    • custom-console-url-namespace — шаблон URL для страницы пространства имен. Поддерживает переменную: {{namespace}}
    • Это позволяет настроить ссылки консоли в UI Git-провайдера, чтобы они указывали на Devops Console.

    Для получения дополнительной информации о настройках PAC смотрите раздел Common Configuration Updates.

    Обновление компонента PAC

    Обновление конфигурации

    1. Отредактируйте CR OpenShiftPipelinesAsCode:

      kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
    2. Обновите поле settings по необходимости:

      spec:
        settings:
          application-name: "My Custom PAC"
          hub-url: http://tekton-hub-api.tekton-pipelines:8000/v1
          remote-tasks: "true"
          error-detection-from-container-logs: "true"
    3. Сохраните и выйдите. Оператор автоматически обновит TektonInstallerSet и применит изменения.

    Обновление версии компонента

    Для обновления версии PAC обновите Tekton Operator:

    1. Обновите Tekton Operator до нужной версии
    2. Оператор автоматически:
      • Удалит старый TektonInstallerSet
      • Создаст новый TektonInstallerSet с новой версией PAC
      • Обновит CR OpenShiftPipelinesAsCode с новой версией

    Проверьте версию после обновления:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o jsonpath='{.status.version}'

    Проверка обновлений

    После обновления конфигурации:

    1. Проверьте статус CR OpenShiftPipelinesAsCode:

      kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

    Пример вывода:

    NAME                VERSION           READY   REASON
    pipelines-as-code   v0.36.0-2881c2a   True    
    1. Проверьте, не перезапускаются ли поды (замените <pac-namespace> на ваше пространство имен PAC):

      kubectl get pods -n <pac-namespace> | grep pipelines-as-code

    Пример вывода:

    pipelines-as-code-controller-665b9588c8-q7ftg        1/1     Running   0          4d2h
    pipelines-as-code-watcher-86d58cb688-xkzxg           1/1     Running   0          4d2h
    pipelines-as-code-webhook-6f6b79c7b6-w8shs           1/1     Running   0          4d2h
    1. Проверьте логи подов на наличие ошибок:

      kubectl logs -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code --tail=50

    Пример вывода:

    {"level":"info","ts":"2025-11-27T19:28:35.773Z","logger":"pipelinesascode","caller":"adapter/adapter.go:84","msg":"Starting Pipelines as Code version: nightly-20251126-"}
    {"level":"info","ts":"2025-11-27T19:28:35.774Z","logger":"pipelinesascode","caller":"injection/health_check.go:43","msg":"Probes server listening on port 8080"}
    ...
    1. Проверьте, что конфигурация применена:

      kubectl get configmap -n <pac-namespace> pipelines-as-code -o yaml

    Пример вывода:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: pipelines-as-code
      namespace: <pac-namespace>
    data:
      application-name: Pipelines as Code CI
      hub-url: https://api.hub.tekton.dev/v1
      remote-tasks: "true"
      secret-auto-create: "true"
      error-detection-from-container-logs: "true"
      error-log-snippet: "true"
      ...

    Откат конфигурации

    Если нужно откатить изменение конфигурации:

    1. Восстановите предыдущую конфигурацию в CR OpenShiftPipelinesAsCode:

      kubectl edit openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code
    2. Или восстановите из резервной копии:

    Создайте резервную копию перед изменениями:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o yaml > pac-backup.yaml

    Восстановите из резервной копии:

    kubectl apply -f pac-backup.yaml

    Частые обновления конфигурации

    Изменение имени приложения

    spec:
      settings:
        application-name: "Новое имя приложения"

    Включение обнаружения ошибок

    spec:
      settings:
        error-detection-from-container-logs: "true"
        error-detection-max-number-of-lines: "100"

    Обновление URL Hub

    Если Tekton Hub развернут в другом namespace или вы хотите использовать внешний Hub:

    spec:
      settings:
        # Для внутреннего Hub в другом namespace
        hub-url: "http://tekton-hub-api.<your-namespace>:8000/v1"
        
        # Или для внешнего/публичного Hub
        hub-url: "https://api.hub.tekton.dev/v1"

    Чтобы найти сервис Tekton Hub:

    kubectl get svc -A | grep tekton-hub-api

    Пример вывода:

    tekton-pipelines   tekton-hub-api   ClusterIP   10.96.123.45   <none>   8000/TCP   10m

    Отключение удаленных задач

    spec:
      settings:
        remote-tasks: "false"

    Настройка ссылок кастомной консоли

    Для интеграции PAC с вашей кастомной консолью настройте ссылки консоли. Это позволяет ссылкам статуса пайплайна в Git-провайдерах (GitLab, GitHub и др.) указывать на вашу кастомную консоль.

    Пример конфигурации
    spec:
      settings:
        # Отображаемое имя кастомной консоли
        custom-console-name: "My Console"
        
        # Базовый URL кастомной консоли (точка входа)
        custom-console-url: "https://console.example.com"
        
        # Шаблон URL для страницы деталей PipelineRun
        # Формат: /console-acp/workspace/{{ namespace }}~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}
        # Замените CLUSTER_NAME на имя вашего кластера (например, my-cluster, business-1)
        custom-console-url-pr-details: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}"
        
        # Шаблон URL для страницы логов TaskRun
        # Формат: /console-acp/workspace/~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}
        custom-console-url-pr-tasklog: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}"
        
        # Шаблон URL для страницы списка пайплайнов пространства имен
        # Формат: /console-acp/workspace/~CLUSTER_NAME~{{ namespace }}/pipeline/pipelineRuns
        custom-console-url-namespace: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns"
    Как настроить

    Шаг 1: Определите имя вашего кластера

    Обратитесь к администратору кластера, чтобы узнать правильное имя кластера. Распространенные примеры:

    • my-cluster — универсальное имя кластера
    • business-1 — для бизнес-кластера 1
    • dev-cluster — для кластера разработки

    Имя кластера появляется в URL как ~CLUSTER_NAME~ (обратите внимание на символы тильды).

    Шаг 2: Установите URL консоли

    Укажите custom-console-url как точку входа в вашу консоль (без завершающего слэша):

    • https://console.example.com
    • https://devops.example.com

    Шаг 3: Настройте шаблоны URL

    Замените CLUSTER_NAME в шаблонах URL на имя вашего кластера. PAC автоматически заменит следующие переменные:

    • {{ namespace }}: пространство имен, в котором выполняется PipelineRun
    • {{ pr }}: имя PipelineRun
    • {{ task }}: имя задачи в PipelineRun
    Пример: Полная конфигурация

    Для кластера с именем my-cluster и консолью по адресу https://console.example.com:

    spec:
      settings:
        custom-console-name: "My Console"
        custom-console-url: "https://console.example.com"
        custom-console-url-pr-details: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}"
        custom-console-url-pr-tasklog: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns/detail/{{ pr }}?tab=task_overview&id={{ task }}"
        custom-console-url-namespace: "https://console.example.com/console-acp/workspace/{{ namespace }}~my-cluster~{{ namespace }}/pipeline/pipelineRuns"
    Пример: Сгенерированные ссылки

    Когда PAC создает PipelineRun с именем my-app-build-abc123 и задачей build-task в пространстве имен my-project:

    • Детали PipelineRun:

      https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns/detail/my-app-build-abc123
    • Логи TaskRun:

      https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns/detail/my-app-build-abc123?tab=task_overview&id=build-task
    • Список пайплайнов пространства имен:

      https://console.example.com/console-acp/workspace/my-project~my-cluster~my-project/pipeline/pipelineRuns

    Эти ссылки будут отображаться в UI вашего Git-провайдера (слияния GitLab, pull requests GitHub и др.), позволяя разработчикам быстро переходить в вашу кастомную консоль.

    Удаление компонента PAC

    Удаление CR OpenShiftPipelinesAsCode

    Шаг 1: Удалите CR

    kubectl delete openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

    Пример вывода:

    openshiftpipelinesascode.operator.tekton.dev "pipelines-as-code" deleted

    Оператор автоматически:

    • Удалит TektonInstallerSet (внутренний ресурс оператора)
    • Удалит все ресурсы, связанные с PAC (Deployment, Service, ConfigMap и др.)
    • Очистит RBAC ресурсы

    Примечание: TektonInstallerSet — внутренний ресурс оператора. Не удаляйте его вручную. Оператор управляет его жизненным циклом автоматически.

    Шаг 2: Проверьте удаление

    Проверьте, что CR OpenShiftPipelinesAsCode удален:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev

    Проверьте, что TektonInstallerSet удален (замените <pac-namespace> на ваше пространство имен PAC):

    kubectl get tektoninstallersets -n <pac-namespace> | grep pipelinesascode

    Примечание: Это проверка только для чтения, чтобы убедиться, что внутренний ресурс оператора очищен. Не пытайтесь удалять TektonInstallerSet вручную.

    Пример вывода (должен быть пустым, если удаление прошло успешно):

    No resources found

    Проверьте, что поды PAC завершены:

    kubectl get pods -n <pac-namespace> | grep pipelines-as-code

    Пример вывода (должен быть пустым, если удаление прошло успешно):

    No resources found

    Очистка дополнительных ресурсов

    После удаления PAC вы можете очистить дополнительные ресурсы:

    Удаление CR репозиториев

    Если у вас есть созданные Repository CR для интеграции с Git-провайдером:

    kubectl get repositories -A
    kubectl delete repositories --all -n <namespace>

    Пример вывода:

    repository.pipelinesascode.tekton.dev "my-repo" deleted
    repository.pipelinesascode.tekton.dev "another-repo" deleted

    Удаление секретов

    Важно: При удалении CR OpenShiftPipelinesAsCode оператор автоматически очищает секреты с меткой app.kubernetes.io/part-of=pipelines-as-code в пространстве имен PAC. Однако секреты, связанные с Repository CR, созданные для аутентификации Git-провайдера, нужно удалять вручную.

    Секреты, которые очищаются автоматически (в пространстве имен PAC):

    • pipelines-as-code-secret — внутренний секрет контроллера PAC (с меткой app.kubernetes.io/part-of=pipelines-as-code)

    Секреты, требующие ручной очистки (в пространствах имен Repository CR):

    • gitlab-secret / github-secret — токены доступа Git-провайдера
    • webhook-secret — секреты валидации webhook
    • git-auth-secret — токены доступа к приватным репозиториям
    • git-ssh-secret — SSH-ключи для доступа к репозиториям

    Чтобы найти и удалить секреты, связанные с Repository CR:

    1. Список всех секретов в пространстве имен, где находятся Repository CR:

      kubectl get secrets -n <namespace>
    2. Определите секреты, которые вы создавали специально для PAC Repository CR.

      Примечание: Имена секретов могут отличаться в зависимости от способа создания. Внимательно просмотрите список, чтобы определить, какие секреты связаны с PAC.

    3. Перед удалением убедитесь, что:

      • Все Repository CR, использующие секрет, удалены
      • Секрет не используется другими приложениями или ресурсами в кластере
      • Вы проверили, что секрет можно безопасно удалить
    4. Удалите секрет только если уверены, что он больше не нужен:

      kubectl delete secret <secret-name> -n <namespace>

    Предупреждение:

    • Секреты могут использоваться несколькими Repository CR или другими ресурсами
    • Удаление используемого секрета приведет к сбоям аутентификации
    • Всегда проверяйте, что секрет не используется, перед удалением

    Пример вывода:

    secret "gitlab-secret" deleted

    Удаление Ingress/Service

    Если вы создавали Ingress или NodePort Service для PAC (замените <pac-namespace> на ваше пространство имен PAC):

    kubectl delete ingress pipelines-as-code -n <pac-namespace>
    kubectl delete service pipelines-as-code-controller-nodeport -n <pac-namespace>

    Пример вывода:

    ingress.networking.k8s.io "pipelines-as-code" deleted
    service "pipelines-as-code-controller-nodeport" deleted

    Устранение неполадок

    Поды PAC не запускаются

    Проверьте логи подов (замените <pac-namespace> на ваше пространство имен PAC):

    kubectl logs -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code

    Пример вывода (пример записей логов):

    {"level":"info","ts":"2024-01-01T12:00:00Z","logger":"controller","msg":"Starting PAC controller"}
    {"level":"info","ts":"2024-01-01T12:00:01Z","logger":"controller","msg":"PAC controller ready"}

    CR OpenShiftPipelinesAsCode не готов

    Проверьте статус CR и события:

    kubectl describe openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code

    Пример вывода (сокращенный):

    Name:         pipelines-as-code
    Namespace:    
    Status:       Ready
    Version:      0.x.x
    Events:
      Type    Reason   Age   From              Message
      ----    ------   ----  ----              -------
      Normal  Ready    5m    tekton-operator   PAC component deployed successfully

    Проблемы с TektonInstallerSet

    Важно: TektonInstallerSet — внутренний ресурс оператора. При проблемах с ним не изменяйте и не удаляйте его напрямую. Устраняйте неполадки через CR OpenShiftPipelinesAsCode.

    Проверьте статус TektonInstallerSet для устранения неполадок (замените <pac-namespace> на ваше пространство имен PAC):

    kubectl get tektoninstallersets -n <pac-namespace> -o yaml

    Если TektonInstallerSet показывает ошибки:

    1. Проверьте статус CR OpenShiftPipelinesAsCode на наличие проблем
    2. Просмотрите логи оператора для подробных сообщений об ошибках
    3. При необходимости удалите и создайте заново CR OpenShiftPipelinesAsCode (оператор автоматически пересоздаст TektonInstallerSet)

    Пример вывода (сокращенный):

    apiVersion: tekton.dev/v1alpha1
    kind: TektonInstallerSet
    metadata:
      name: pipelines-as-code-installer-set
      namespace: tekton-pipelines
    status:
      conditions:
      - status: "True"
        type: Ready

    CR не удаляется

    Если CR OpenShiftPipelinesAsCode не удаляется, проверьте наличие finalizers:

    kubectl get openshiftpipelinesascodes.operator.tekton.dev pipelines-as-code -o yaml | grep finalizers

    Пример вывода (если finalizers есть):

      finalizers:
      - tekton.dev/operator

    Если finalizers отсутствуют, вывод будет пустым, что означает, что CR можно удалить.

    Если finalizers есть, оператор, возможно, еще обрабатывает удаление. Подождите несколько минут и попробуйте снова.

    Ресурсы не удаляются

    Если некоторые ресурсы не удаляются автоматически:

    1. Проверьте статус TektonInstallerSet для устранения неполадок (замените <pac-namespace> на ваше пространство имен PAC):

      kubectl get tektoninstallersets -n <pac-namespace> -o yaml

      Примечание: Это проверка только для чтения. TektonInstallerSet — внутренний ресурс оператора. Не удаляйте его вручную.

    2. Удалите оставшиеся ресурсы вручную:

      kubectl delete deployment -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code
      kubectl delete service -n <pac-namespace> -l app.kubernetes.io/part-of=pipelines-as-code

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