GitHub
部署公开和私有仓库,每次推送后自动重新部署。
连接 GitHub
- 在项目中点击 添加服务 → GitHub。
- 点击 连接 GitHub,选择你的账号或组织,并选择 Zenavo 可以读取的仓库。完成后会回到项目。
只有团队的所有者和管理员可以连接 GitHub。Zenavo 会获得所选仓库的代码和元数据的读取权限,以及它们的推送事件。以后要添加更多仓库,可以从仓库列表打开 GitHub App 的设置,或者搜索缺少的仓库,然后选择 重新安装 GitHub App。
添加仓库
- 选择仓库。 仓库按最近推送时间排列,可以输入关键字搜索。
- 选择分支 或标签。
- 配置构建计划:
- 服务名称:任意名称,最多 64 个字符,之后可以修改。服务永久的 ID 由这个名称生成。
- 根目录:在 monorepo 中,填写这个服务所在的文件夹,例如
/apps/web。 - 环境变量:逐行添加,或者点击 编辑原始变量 粘贴
KEY=value格式的多行内容。 - 高级设置:Dockerfile 路径、HTTP 端口,以及 推送到这个分支时自动部署(默认开启)。
- 构建计划预览 显示服务将如何构建:使用你的 Dockerfile,或者 zbpack 识别出的语言和版本,以及端口。点击 配置 修改,或点击 部署。
推送时部署
开启自动部署后,每次推送到该分支都会构建并部署项目。推送到其他分支会被忽略。之后可以在服务的 设置 标签页 → 自动部署 中开启或关闭。
监听路径
在 monorepo 中,推送一个应用不应该重新部署其他应用。在服务的 设置 标签页 → 监听路径 中每行填写一个模式;之后只有推送改动了匹配的文件时才会部署。留空则每次推送都部署。
模式使用 .gitignore 语法,从仓库根目录(不是服务的根目录)开始匹配,但选中的是触发部署的文件:
| 模式 | 推送改动了以下内容时部署 |
|---|---|
apps/web/ | apps/web 下的任何文件 |
/package.json | 仅仓库根目录下的 package.json |
*.go | 任何文件夹中的任何 Go 文件 |
packages/**/src | packages 下任意层级的 src 文件夹 |
!**/*.md | 不包括 Markdown 文件,即使在被监听的文件夹中 |
与 .gitignore 一样,开头或中间带 / 的模式相对于仓库根目录,不带 / 的模式匹配任意层级。* 和 ? 只匹配一个文件夹名称内的字符,** 可以跨文件夹,最后一个匹配到文件的模式起决定作用。新增、修改和删除的文件都算。
Zenavo 从 GitHub 的推送事件中读取改动的文件。如果事件中没有列出文件(例如一次推送超过 2,048 个提交,或分支被移动到已有的提交),服务会照常部署。从控制台或 CLI 重新部署时总是会部署,不受监听路径影响。
只要跟踪该分支的任何一个开启了自动部署的服务监听到了改动的文件,这次推送就会部署项目。