• Русский
  • Получение URL вебхука PAC

    Контроллер PAC получает события вебхуков от провайдеров Git через Service pipelines-as-code-controller. На этой странице показано, как запросить URL вебхука после того, как администратор откроет доступ к этому Service.

    В примерах используется пространство имен PAC по умолчанию tekton-pipelines. Если ваш CR OpenShiftPipelinesAsCode использует другое targetNamespace, замените tekton-pipelines в командах.

    Основные разделы ниже следуют тому же порядку, что и в Configure Access: Gateway API, Ingress и NodePort. Используйте раздел, который соответствует способу экспонирования PAC.

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

    Используйте этот раздел, если PAC был экспонирован с помощью Gateway API.

    Шаг 1: Проверьте ресурсы Gateway API. Убедитесь, что Gateway запрограммирован, а маршрут принят:

    kubectl get gateway pipelines-as-code -n tekton-pipelines
    kubectl get httproute pipelines-as-code -n tekton-pipelines

    Ожидаемый результат: у Gateway отображается PROGRAMMED=True, а HTTPRoute принят.

    Шаг 2: Получите внешний адрес. Выведите созданный Service Envoy и его внешний IP:

    kubectl get svc -A \
      -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines
    
    EXTERNAL_IP=$(kubectl get svc -A \
      -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines \
      -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
    
    echo "${EXTERNAL_IP}"

    Ожидаемый результат: EXTERNAL_IP не пустой.

    Если EXTERNAL_IP пустой, сначала настройте провайдер LoadBalancer для кластера. Для bare-metal кластеров ACP используйте Alauda Container Platform Load Balancer for MetalLB. Справка: Configure MetalLB.

    Шаг 3: Проверьте и получите URL вебхука. Убедитесь, что провайдер Git может разрешить и получить доступ к домену PAC. Например, разрешите pac.example.com в EXTERNAL_IP Service из сети провайдера Git.

    Если DNS еще не готов или вы хотите проверить маршрут только со своей текущей машины, используйте curl --resolve:

    curl -i --resolve "pac.example.com:80:${EXTERNAL_IP}" http://pac.example.com/

    После того как домен станет доступен из сети провайдера Git, выведите URL:

    echo "WEBHOOK_URL=http://pac.example.com"

    Зарегистрируйте этот URL в провайдере Git или укажите его, когда tkn pac create repo запросит URL вебхука.

    Не регистрируйте необработанный IP, если из манифеста экспонирования не были удалены hostname у слушателя Gateway и hostnames у HTTPRoute.

    Если Gateway был настроен с envoyService.type: NodePort, выведите URL вебхука на основе IP:

    NODEPORT=$(kubectl get svc -A \
      -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines \
      -o jsonpath='{.items[0].spec.ports[?(@.port==80)].nodePort}')
    
    NODE_IP=$(kubectl get nodes \
      -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
    
    echo "WEBHOOK_URL=http://${NODE_IP}:${NODEPORT}"

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

    Используйте этот раздел, если PAC был экспонирован с помощью Ingress.

    Шаг 1: Проверьте адрес Ingress.

    kubectl get ingress pipelines-as-code -n tekton-pipelines

    Шаг 2: Получите URL вебхука. Если у Ingress задан host, выведите URL:

    HOST=$(kubectl get ingress pipelines-as-code -n tekton-pipelines \
      -o jsonpath='{.spec.rules[0].host}')
    
    echo "WEBHOOK_URL=http://${HOST}"

    Используйте https://${HOST} вместо этого, если для Ingress настроен TLS:

    echo "WEBHOOK_URL=https://${HOST}"

    Если Ingress без host, используйте адрес, показанный командой kubectl get ingress, и зарегистрируйте доступный IP-URL.

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

    Используйте этот раздел, если PAC был экспонирован через выделенный Service NodePort. Выведите URL на основе доступного IP узла и созданного NodePort:

    NODEPORT=$(kubectl get svc pipelines-as-code-controller-nodeport -n tekton-pipelines \
      -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}')
    
    NODE_IP=$(kubectl get nodes \
      -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
    
    echo "WEBHOOK_URL=http://${NODE_IP}:${NODEPORT}"

    Проверка

    URL вебхука должен быть доступен из вашего провайдера Git. Для публичного провайдера Git URL должен быть доступен из интернета. Для self-hosted провайдера Git достаточно сетевой доступности от хоста провайдера до кластера.

    Выполните быструю проверку с хоста, который может достичь endpoint PAC:

    WEBHOOK_URL="http://pac.example.com"
    curl -i "${WEBHOOK_URL}"

    В текущих версиях PAC GET / возвращает 200 OK с небольшим JSON-телом статуса. Ошибка connection refused или timeout указывает на сетевую проблему.

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