获取 PAC Webhook URL

Important

在使用此页面之前,管理员必须按照 Configure Access 中的说明公开 PAC controller。

使用此页面获取 PAC 的 webhook URL。此 URL 可让 Git 提供商将仓库事件(例如 commits 和 merge requests)通知给 PAC,从而使 PAC 能够触发匹配的 PipelineRuns。

请选择与 PAC 暴露方式相匹配的部分:Gateway API、Ingress 或 NodePort。示例使用默认的 PAC namespace tekton-pipelines;如果你的 TektonConfig 使用了不同的 targetNamespace,请在命令中替换它。

使用 Gateway API

如果 PAC 是通过 Gateway API 暴露的,请使用此部分。

从 HTTPRoute 中读取 host 并打印 webhook URL:

HOST=$(kubectl get httproute pipelines-as-code -n tekton-pipelines \
  -o jsonpath='{.spec.hostnames[0]}')

if [ -z "${HOST}" ]; then
  echo "HTTPRoute host is empty. Configure a hostname in the exposure manifest first."
  exit 1
fi

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

预期结果:命令会打印基于 host 的 PAC webhook URL。

在配置 Git 提供商 webhook 或设置仓库集成时使用此 URL。若要自动注册 webhook,还需要按下文所述将此 URL 记录到 pipelines-as-code-info 中。

使用 Ingress

如果 PAC 是通过 Ingress 暴露的,请使用此部分。

从 Ingress 中读取 host 并打印 webhook URL:

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

if [ -z "${HOST}" ]; then
  echo "Ingress host is empty. Configure a host rule or use a reachable address from the Ingress controller."
  exit 1
fi

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

如果 Ingress 已配置 TLS,则改用 https://${HOST}:

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

使用 NodePort

如果 PAC 是通过专用的 NodePort Service 暴露的,请使用此部分。从可访问的 node IP 和生成的 NodePort 打印 URL:

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}')

WEBHOOK_URL="http://${NODE_IP}:${NODEPORT}"
echo "${WEBHOOK_URL}"

记录 Webhook URL

自动 webhook 注册会从 pipelines-as-code-info.data.controller-url 读取公开的 PAC webhook URL。选择并验证 WEBHOOK_URL 后,请更新 PAC component options,以便 Tekton Operator 管理该 ConfigMap。

在 TektonConfig 中,更新 platforms.kubernetes 下的 pipelinesAsCode options。operator 会在 platforms.openshift 下拒绝相同的 block,并返回 validation error:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  targetNamespace: tekton-pipelines
  platforms:
    kubernetes:
      pipelinesAsCode:
        enable: true
        options:
          disabled: false
          configMaps:
            pipelines-as-code-info:
              data:
                controller-url: https://pac.example.com

不要把这个 block 放到派生的 OpenShiftPipelinesAsCode CR 上:operator 会在下一次 reconcile 时将 options 从 TektonConfig 复制回去,因此该 URL 会丢失。唯一的例外是 TektonConfig 根本不管理 PAC 的集群——即 spec.profile 为 basic 或 lite——在这种情况下,同样的 options block 应放在该 CR 的 spec.options 下。参见 How the Operator Manages PAC。

将 https://pac.example.com 替换为打印出的 WEBHOOK_URL 值。当该值变更时,webhook registration controller 会协调所有 PAC Repository 资源,使其 provider-side webhooks 使用新的 URL。

验证

Webhook URL 必须能够从你的 Git 提供商访问。对于公开的 Git 提供商,URL 必须可被公网访问。对于自建的 Git 提供商,只要 provider host 能够访问集群即可。

如果 DNS 尚未就绪,请在 Git 提供商网络中,将 host 解析为 Gateway 或 Ingress 的 external address 后再验证 route。除非 PAC 暴露配置不要求 host,否则不要注册原始 IP URL。

设置 WEBHOOK_URL 后,从可访问 PAC endpoint 的主机执行一次快速检查:

curl -i "${WEBHOOK_URL}"

在当前 PAC 版本中,GET / 会返回带有简短 JSON status body 的 200 OK。如果出现 connection refused 或 timeout,则表示存在网络问题。

后续步骤