> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Coolify 变更集成

> 通过 Coolify 的 Webhook 通知渠道将应用部署结果同步到 Flashduty On-call，作为变更事件与告警、故障关联。

<Tip>**版本要求**：此功能需要 On-call 标准版及以上订阅。[了解更多](https://flashcat.cloud/flashduty/price/)</Tip>

通过 Coolify 的 Webhook 通知渠道，将应用部署的结果同步到 Flashduty On-call。每次部署对应一条 Flashduty 变更，在部署结束时记录一次。

Coolify 只在部署结束时发送通知，没有开始事件，因此变更没有 Processing 中间状态，直接记录为结束状态：Done 或 Failed。Coolify 不会为用户手动取消的部署发送通知，所以不会出现 Canceled。

<div className="hide">
  ## 在 Flashduty On-call

  ***

  1. 进入 Flashduty 控制台，选择 **集成中心 → 变更事件**
  2. 选择 **Coolify**，填写集成名称
  3. 如需把变更分派到指定协作空间，在集成的 **路由** 中按标签（例如 `application`、`project`、`environment`）配置规则
  4. 点击 **保存**，复制生成的 **推送地址**
</div>

## 在 Coolify 中配置

***

<Steps>
  <Step title="打开 Webhook 通知渠道">
    1. 在 Coolify 控制台左侧栏选择 **Notifications**，进入 **Webhook** 渠道
    2. 在 Webhook URL 中粘贴 Flashduty 集成的完整推送地址，保存
    3. 打开 **Enabled** 开关

    Coolify 的通知按团队（Team）配置，该团队下所有项目的部署都会推送到这个地址。
  </Step>

  <Step title="选择事件">
    在 **Notification Settings** 中勾选部署成功（`deployment_success`）和部署失败（`deployment_failed`）对应的事件。

    同时勾选其他事件（备份、定时任务、服务器、容器等）不会出错，这些事件不生成变更，会被忽略。
  </Step>

  <Step title="发送测试">
    点击测试通知按钮，Flashduty 返回成功且不生成变更。之后触发一次部署，即可在 Flashduty 变更列表中看到记录。
  </Step>
</Steps>

## 一条变更是什么

***

| Coolify 对象 | 变更标识（change\_key） | 说明 |
| - | - | - |
| 部署（Deployment） | `deployment_uuid` | 每次部署有独立的 UUID，对应一条 Flashduty 变更；同一应用、同一环境的两次部署是两条变更，Pull Request 预览部署也是独立的变更 |

多服务器部署时，Coolify 在所有服务器部署结束后只发送一条通知：全部成功时使用主部署的 UUID，有失败时使用第一个未成功的部署的 UUID。

## 状态映射

***

| Coolify `event` | Flashduty 变更状态 |
| - | - |
| `deployment_success` | Done |
| `deployment_failed` | Failed |

以下推送返回成功但不生成变更：

* `test`（测试通知）
* `status_changed`、`restart_limit_reached`（应用运行状态通知，不是部署）
* 备份、定时任务、Docker 清理、服务器和容器相关的事件

## 变更内容

***

| 字段 | 内容 |
| - | - |
| 标题 | `<应用名>: deploy to <环境>`，Pull Request 预览部署为 `<应用名>: deploy PR #<编号> to <环境>`，例如 `web-shop: deploy to production` |
| 描述 | Coolify 的通知文案，例如 `New version successfully deployed`、`Deployment failed` |
| 链接 | Coolify 中该次部署的日志页面 |
| 变更时间 | Coolify 的部署通知不带时间字段，使用 Flashduty 收到推送的时间 |

标签可用于路由和在变更列表中筛选：

| 标签 | 说明 |
| - | - |
| `application` | 应用名 |
| `application_uuid` | 应用 UUID |
| `project` | 项目名 |
| `environment` | 环境名 |
| `deployment_id` | 部署 UUID |
| `pull_request_id` | Pull Request 编号，仅预览部署有 |
| `fqdn` | 应用域名，未配置时为空 |
| `preview_fqdn` | 预览部署的域名，仅预览部署有 |
| `coolify_event` | Coolify 的事件名原值 |

## 常见问题

***

<AccordionGroup>
  <Accordion title="为什么看不到部署的运行中状态？">
    Coolify 的 Webhook 通知只在部署成功或失败时发送，不推送开始事件。变更在部署结束时以最终状态出现。
  </Accordion>

  <Accordion title="取消的部署为什么没有记录？">
    Coolify 对用户手动取消的部署不发送通知，Flashduty 收不到推送，因此不会生成 Canceled 变更。
  </Accordion>

  <Accordion title="Coolify 重试推送会重复记录吗？">
    同一次部署始终是同一条变更，重试不会产生第二条变更。但部署通知没有时间字段，重试的推送会作为同一条变更的一个新事件出现，状态和结果不变。
  </Accordion>

  <Accordion title="推送返回 InvalidParameter 错误？">
    * `deployment_uuid is missing`：推送内容不完整，请确认推送来自 Coolify 的 Webhook 通知渠道
    * `unknown event`：出现了未收录的部署事件名，请联系我们补充映射
  </Accordion>
</AccordionGroup>
