logo
10
3
Login
docs: 更新安全配置部分,明确签名验证使用 HMAC-SHA256

Webhook

通过 Webhook 发送构建状态通知

参数说明

基本配置

  • urls: 必填,Webhook 通知地址列表,支持多个地址
  • method: 选填,HTTP 请求方法,支持 GET、POST、PUT 等。默认为 POST
  • content_type: 选填,HTTP 请求的 Content-Type。默认为 application/json
  • headers: 选填,自定义 HTTP 请求头,格式为 key=value 对的数组
  • valid_response_codes: 选填,有效的 HTTP 响应状态码列表(可选),只有返回这些状态码才认为请求成功。格式为整数数组
  • debug: 选填,是否启用调试模式,true 或 false,默认为 false。启用后将输出详细的请求和响应信息

认证配置

  • username: 选填,HTTP 基本认证的用户名。
  • password: 选填,HTTP 基本认证的密码。
  • token_type: 选填,认证令牌的类型,如 Bearer、Token 等。默认为 Bearer。 添加到请求头的 Authorization 中,格式为 Authorization: ${token_type} ${token_value}.
  • token_value: 选填,认证令牌的值。

安全配置

  • signature_header: 选填,签名请求头的名称,用于请求 HMAC-SHA256 签名验证
  • signature_secret: 选填,签名密钥,用于生成 HMAC-SHA256 请求签名
  • skip_verify: 选填,是否跳过 SSL 证书验证。默认为 false。

消息模板

template: 选填,自定义消息模板,用于格式化发送的消息内容。如果未设置,将使用默认的 JSON 格式。

其中 template 的变量替换支持两种替换方式:

  • 使用 handlebars 进行模版字符串替换。 可使用 {{ variable }} 语法引用环境变量。变量值带有特殊字符会被转义。
  • 使用 CNB 自身的环境变量替换方式,如 ${ variable }, 这种方式如果环境变量中带有双引号、换行等会导致 json 格式错乱的字符, 可能会导致 JSON 无法正常解析。

其中 variable 可使用 CNB 提供的环境变量,如 ${CNB_REPO_NAME}{{ CNB_REPO_NAME }}

{ "repoName": "{{ CNB_REPO_NAME }}", "repoUrl": "${CNB_REPO_URL_HTTPS}" }

如果未设置template,将使用默认 JSON 字符串格式作为请求 body,默认格式如下,变量含义详见

{ "CNB_WEB_PROTOCOL", "CNB_WEB_HOST", "CNB_WEB_ENDPOINT", "CNB_API_ENDPOINT", "CNB_GROUP_SLUG", "CNB_GROUP_SLUG_LOWERCASE", "CNB_EVENT", "CNB_EVENT_URL", "CNB_BRANCH", "CNB_BRANCH_SHA", "CNB_TOKEN_USER_NAME", "CNB_TOKEN", "CNB_TOKEN_FOR_AI", "CNB_IS_CRONEVENT", "CNB_DOCKER_REGISTRY", "CNB_HELM_REGISTRY", "CNB_BEFORE_SHA", "CNB_COMMIT", "CNB_COMMIT_SHORT", "CNB_COMMIT_MESSAGE", "CNB_COMMIT_MESSAGE_TITLE", "CNB_COMMITTER", "CNB_COMMITTER_EMAIL", "CNB_IS_TAG", "CNB_TAG_MESSAGE", "CNB_TAG_RELEASE_TITLE", "CNB_TAG_RELEASE_DESC", "CNB_TAG_IS_RELEASE", "CNB_TAG_IS_PRE_RELEASE", "CNB_IS_NEW_BRANCH", "CNB_IS_NEW_BRANCH_WITH_UPDATE", "CNB_REPO_SLUG", "CNB_REPO_SLUG_LOWERCASE", "CNB_REPO_NAME", "CNB_REPO_NAME_LOWERCASE", "CNB_REPO_ID", "CNB_REPO_URL_HTTPS", "CNB_BUILD_ID", "CNB_BUILD_WEB_URL", "CNB_BUILD_START_TIME", "CNB_BUILD_USER", "CNB_BUILD_USER_ID", "CNB_BUILD_STAGE_NAME", "CNB_BUILD_JOB_NAME", "CNB_BUILD_JOB_KEY", "CNB_BUILD_WORKSPACE", "CNB_BUILD_FAILED_MSG", "CNB_BUILD_FAILED_STAGE_NAME", "CNB_PIPELINE_NAME", "CNB_PIPELINE_KEY", "CNB_PIPELINE_ID", "CNB_PIPELINE_DOCKER_IMAGE", "CNB_RUNNER_IP", "CNB_CPUS", "CNB_IS_RETRY", "CNB_PULL_REQUEST", "CNB_PULL_REQUEST_LIKE", "CNB_PULL_REQUEST_PROPOSER", "CNB_PULL_REQUEST_TITLE", "CNB_PULL_REQUEST_BRANCH", "CNB_PULL_REQUEST_SHA", "CNB_PULL_REQUEST_TARGET_SHA", "CNB_PULL_REQUEST_MERGE_SHA", "CNB_PULL_REQUEST_SLUG", "CNB_PULL_REQUEST_ACTION", "CNB_PULL_REQUEST_ID", "CNB_PULL_REQUEST_IID", "CNB_PULL_REQUEST_REVIEWERS", "CNB_PULL_REQUEST_REVIEW_STATE", "CNB_REVIEW_REVIEWED_BY", "CNB_REVIEW_LAST_REVIEWED_BY", "CNB_VSCODE_WEB_URL", "CNB_ISSUE_ID", "CNB_ISSUE_IID", "CNB_ISSUE_TITLE", "CNB_ISSUE_DESCRIPTION", "CNB_ISSUE_OWNER", "CNB_ISSUE_STATE", "CNB_ISSUE_IS_RESOLVED", "CNB_COMMENT_ID", "CNB_COMMENT_BODY" }

在 云原生构建 上使用

简单示例

# .cnb.yml main: push: - stages: - name: notify image: cnbcool/webhook settings: urls: - https://api.example.com/webhook method: POST content_type: application/json template: | { "owner": "{{ CNB_BUILD_USER }}", "repo": "{{ CNB_REPO_SLUG }}", "url": "{{ CNB_REPO_URL_HTTPS }}", "event": "{{ CNB_EVENT }}" }

高级示例

# .cnb.yml main: push: - stages: - name: notify image: cnbcool/webhook settings: urls: - https://api.example.com/webhook1 - https://api.example.com/webhook2 method: POST username: webhook-user password: webhook-password content_type: application/json template: | { "owner": "{{ CNB_BUILD_USER }}", "repo": "{{ CNB_REPO_SLUG }}", "url": "{{ CNB_REPO_URL_HTTPS }}", "event": "{{ CNB_EVENT }}" } headers: - "X-Custom-Header=custom-value" - "Authorization=Bearer my-token" token_type: "Bearer" token_value: "my-token" signature_header: "X-CNB-Signature" signature_secret: "your-signature-secret" valid_response_codes: [200, 201, 204] skip_verify: false debug: true