网站

从 Git 部署网站

Git Deploy connects a repository to a site so that every push to your chosen branch clones the code, runs your build, and publishes the result. This guide covers the initial connection, the two…

Git Deploy 连接一个代码库到网站,使得每次推送到选定分支都会克隆代码、运行构建并发布结果。本指南涵盖初始连接、完成设置的两个代码库端步骤、读取部署历史以及决定 Node.js 应用如何构建的 buildpack 检测。

Git Deploy 的位置

打开"网站",点击网站,在网站标签栏中打开"高级"菜单,然后选择"Git Deploy"。同一菜单中有两个相关页面:

  • 部署,该网站的完整部署历史。
  • Buildpack,检测到的构建策略,用于 Node.js 网站。

Git Deploy 页面清晰地描述了自己:连接代码库,每次推送到配置的分支都会触发构建和部署。

KPanel 中的 Git Deploy 配置页面

连接代码库

  1. 选择您的提供商:GitHub、GitLab 或 Bitbucket。
  2. 输入代码库 URL。SSH 形式是您需要的,例如 git@github.com:user/repo.git
  3. 设置要部署的分支。该字段以 main 开始。
  4. 可选择设置构建命令,例如 npm run build
  5. 可选择设置输出目录,例如 distpublic.,用于已经构建的代码库。
  6. 点击连接代码库

如果您的代码库已经可以按原样部署(这对纯 PHP 或静态网站是常见情况),请将构建命令和输出目录留空。

高级脚本

展开高级显示两个额外字段:

  • 部署前脚本,在构建之前运行。
  • 部署后脚本,在部署之后运行。

对于必须在新代码到位后发生的事情,使用部署后钩子:清除应用程序缓存、运行数据库迁移、重新启动工作进程。

推送时自动部署

卡片底部的切换控制推送是否会触发部署。打开时,每次推送到配置的分支都会触发部署。关闭时,部署仅在您使用立即部署手动触发时运行。

在代码冻结或事件期间关闭自动部署,而不是断开代码库的连接。断开连接会删除部署密钥和 webhook 密钥,因此之后您必须重新执行两个代码库端的步骤。

在您的代码库中完成设置

在 KPanel 中连接代码库只是三个步骤中的第一个。在部署运行之前,页面显示一个横幅,读作完成设置:还剩 2 个步骤,其中包含您需要的所有内容。

步骤 2:添加部署密钥

Kapsule 需要读取访问权限来克隆您的代码库。横幅显示一个公钥和一个复制密钥按钮。

将其粘贴到您的代码库的部署密钥中。对于 GitHub,横幅提供一个添加到 GitHub 快捷方式,直接转到正确的设置页面。读取访问权限就足够了; 不要授予写入权限。

步骤 3:添加 Webhook

Webhook 是告诉 Kapsule 推送已发生的内容。横幅给您三个值:

字段
有效负载 URL/api/git-deploy/webhook/ 结尾的 URL 加上此网站的 ID
密钥一个生成的签名密钥,隐藏直到您点击眼睛图标
内容类型application/json

将每个值复制到您的代码库的 webhook 设置中。对于 GitHub,有一个添加 webhook 到 GitHub 快捷方式。将内容类型设置为 JSON,而不是表单编码的默认值,否则有效负载将无法解析。

将 webhook 密钥视为密码。任何拥有它以及有效负载 URL 的人都可以触发网站的部署。这两个值仅显示给已经可以管理网站的人,密钥在您要求之前一直隐藏在眼睛图标后面。

手动部署

在 Git Deploy 页面上点击立即部署,构建并部署配置分支的当前头部,而无需推送提交。无论自动部署是否打开,这都有效,这就是它在冻结期间的正确工具:推送被忽略,但您仍然可以部署修复。

读取部署历史

打开高级,然后部署。页面标题为部署历史,列出由 webhook 或手动触发的每个部署,最新的在前。

每一行包含:

  • 一个状态图标和短提交 SHA,分支作为药丸。
  • 提交消息,或如果没有提交消息要显示则为手动部署
  • 作者、多久前运行、花费的时间以及触发它的原因。
  • 一个状态药丸。

状态为待处理构建中部署中成功失败。当有任何内容在进行中时,页面每五秒刷新一次,并在表格下方显示一个自动刷新注释,因此您可以打开它并观看部署完成。

部署失败时

失败的行在右侧获得一个错误按钮。点击它以在线展开捕获的错误输出,无需离开页面。该输出是构建自己的错误文本,因此它通常会命名失败的文件或命令。

按此顺序处理:阅读错误、在本地重现相同的构建命令、修复、推送。如果构建在本地运行但此处不运行,差异几乎总是环境方面的,一个在您的计算机上全局安装的缺失依赖,或在您的工作目录中但未提交的文件。

Buildpack 检测

在 Node.js 网站上,高级菜单中的 Buildpack 页面显示 Kapsule 如何决定构建您的应用程序。检测在您的代码库根目录处的文件上运行,第一个匹配获胜:

检测到触发器
自定义 buildpack根目录中的 kapsule.config.yamlkapsule.config.yml
Dockerfile buildpack根目录中的 Dockerfile
Node.jspackage.json 带有 startbuilddev 脚本
Pythonrequirements.txtpyproject.toml
PHPcomposer.json
静态根目录中的 index.html

如果没有匹配,页面会说出来并列出支持的触发器。添加一个 Dockerfile 或一个 kapsule.config.yaml 来显式控制构建。

运行构建

点击运行构建来排队。页面在运行中每三秒轮询一次,最近的构建表格显示最后的运行及其启动时间、类型、状态、持续时间和生成的映像引用。点击一行以查看其日志尾部。

一次只能有一个构建在进行中。在一个已排队或运行时触发第二个会被拒绝,显示构建已在进行中,这是有意的:两个构建同时写入相同的输出是您获得半部署网站的方式。

断开连接

点击断开连接并确认。确认明确说明了影响范围:Git 部署配置和部署密钥被删除,您的网站文件不受影响。网站继续提供最后部署的任何内容。

之后通过删除代码库设置中的部署密钥和 webhook 来整理。它们将简单地停止工作,但留下死条目会使下一次审计变得更困难。

故障排除

推送不触发任何事情。 首先检查自动部署切换,然后检查代码库中的 webhook。大多数提供商显示最近的交付及其响应代码,这立即告诉您请求是否离开了您的代码库。

克隆失败。 部署密钥丢失、被粘贴时带有换行符,或被添加到错误的代码库。使用复制密钥按钮再次复制它,而不是手动选择文本。

部署成功但网站没有变化。 输出目录可能是错误的。如果您的构建写入 dist,输出目录为空,构建的文件永远不会到达提供的根目录。

所有内容都说待处理并且从不移动。 部署已排队但从不被获取。触发一个手动立即部署并检查部署页面以查找错误行。

下一步

仍需帮助?

请发送邮件至 support@kapsulehost.com 或在 KPanel 中打开聊天。

打开 KPanel
从 Git 部署网站