获取 PAC Webhook URL

Important

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

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

请选择与 PAC 暴露方式相对应的部分:Gateway API、Ingress 或 NodePort。示例使用默认的 PAC namespace tekton-pipelines;如果你的 OpenShiftPipelinesAsCode CR 使用了不同的 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 或设置 repository integration 时使用此 URL。

使用 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 必须能够从你的 Git 提供商访问。对于公共 Git 提供商,该 URL 必须可从公网访问。对于自托管 Git 提供商,只要提供商主机可以访问集群网络即可。

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

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

curl -i "${WEBHOOK_URL}"

在当前 PAC 版本中,GET / 会返回 200 OK,并带有一个较小的 JSON 状态体。出现 connection refused 或 timeout 表示存在网络问题。

下一步