Skip to content

Latest commit

 

History

History
30 lines (21 loc) · 3.13 KB

File metadata and controls

30 lines (21 loc) · 3.13 KB

我有一个GitLab服务器,位于没有互联网连接的局域网,在其上布置CI Runner会变得极其复杂,因此我想使用一个额外的机器,在其上布置一个服务器,接收来自GitLab的Webhook通知,然后从GitLab上自动获取对应的仓库并调用本地命令执行构建。

该机器是Windows 11系统,我希望使用 Deno 开发服务器,使用Sveltekit作为架构,Tailwind来风格化服务器页面。

我已经建立了一个sveltekit项目模板,我希望按照以下方针进行开发:

概念:

  • 跟踪的项目:已添加到服务器的GitLab项目,使用UUID来标识,未跟踪的项目即使收到Webhook通知也不出发构建,已跟踪的项目会在创建跟踪时拉取项目到本地,然后在收到Webhook通知后重新拉取最新代码,接着执行构建。

  • 构建任务:对某个跟踪项目的构建流程,使用UUID来标识,当某个跟踪项目触发构建后,会创建一个该项目的构建任务到构建队列中。

  • 构建队列:服务器全局维护的一个构建任务队列,可以配置同时运行多少任务,使用 Deno.cron 来处理积压的队列任务。

  • 构建模板:服务器并不硬编码构建脚本,而是提供一个可供配置、添加、删除的构建模板列表,可以将项目设置为特定的构建模板,该模板使用UUID来标识,每个构建模板的配置包括脚本代码、构建超时、构建结果文件位置(用于之后制成压缩包)、构建成功的命令行输出正则匹配表达式等等。

  • <server_url>/:服务器主页,可以在上面查看服务器的总体运行状态的仪表盘

  • <server_url>/repos:跟踪的项目列表,可以在此处查看所有跟踪项目的状态

  • <server_url>/repo/<repo-uuid>:特定项目,可以在此处查看特定项目的构建历史、当前状态等等

  • <server_url>/task/<task-uuid>:特定构建任务,可以在此处查看特定构建任务的完成情况、命令输出、当前状态、关联项目、构建结果文件等等

  • <server_url>/templates:构建模板列表,可以在此处查看、删除、添加定义的构建模板

  • <server_url>/template/<template-uuid>:特定构建模板,可以在此处修改、删除构建模板

架构:

  • 服务器通过Webhook端点接收GitLab仓库的事件
  • 服务器通过 DenoKV 来将持久化服务器数据
  • 服务器通过 Deno.cron 来执行队列中的构建任务
  • 用户访问服务器网站来查看项目构建状态、下载构建结果,服务器不直接上传到GitLab

我使用 Svelte 5,Tailwind 4,Deno 2,因此没有 tailwind.config.js 文件,你应该优先使用 Svelte Rune 来管理状态。此外 项目拉取与构建结果需要放在 <运行目录>/builder 文件夹下。其次,你不需要验证 Webhook 的签名,我是在可信环境下运行服务器。环境变量会提供一个 GitLab 令牌用于克隆/拉取。构建脚本也不需要沙箱化。

请先立一个大纲供我审阅,待我确认完毕后再开发编码,当你遇到任何问题时,积极向我汇报并等待我回复,我会和你一起开发,你不是一个人。