尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
本地代码托管 + CI/Workflow(FreeBSD 自建 Gitea Actions)
问题我在近期开发项目的时候碰到github时通时断的情况非常影响项目进度。备用库用gitcode但是没有CI那些功能服务。我在想能否在本地搭建一套库服务能够提供github CI Workflow等服务那多好啊服务器放在192.168.1.5 用户workbuddy 密码放在.env文件中。你来帮我规划和实践一下AI帮我完成目标在192.168.1.5FreeBSD 14.3上自建一套类 GitHub 的代码托管 CI 服务 彻底摆脱 GitHub 时通时断对研发进度的影响。结论不需要换成 UbuntuFreeBSD 原生即可。1. TL;DR已验证结论议题结论是否必须换 Ubuntu Linux否。FreeBSD 14.3 Gitea 1.24 act_runner 0.4 完全够用。CI 跑得动吗能。host 模式单 job 实测0.22 秒跑通uname/whoami/版本探测 单测。需要 Docker/Podman 吗不需要。采用host 模式runner 直接在本机执行无容器。actions/checkout 依赖 GitHub 吗已解除。裸写uses: actions/checkoutv4走本地匿名拉取。开机自启吗是。gitea_enableYES、act_runner_enableYES。服务地址http://192.168.1.5:3000 SSH 端口22222. 架构概览Giteapkg 安装/usr/local/sbin/gitea配置/usr/local/etc/gitea/conf/app.ini。act_runnerpkg 安装/usr/local/bin/act_runner以act_runner用户降权运行由daemon(8)监护 rc.d/act_runner开机自启。Actions 日志/var/db/gitea/data/actions_log/owner/repo/run/job.log.zstzstd 压缩。3. 部署脚本清单deploy/脚本作用01_setup_gitea.sh初始化 Gitea 配置并启动幂等DEFAULT_ACTIONS_URL已固化为本地。02_setup_runner.sh注册 act_runner 到 Giteahost 模式。03_fix_runner_rc.sh修复 rc 双重降权 bug见 §4设act_runner_enableYES。04_cleanup_and_check.sh清理诊断残留 daemon确认工具链可用。05_ci_smoke.sh建skywalk/ci-smoke仓库跑冒烟 CI。06_ci_logs.sh演示如何读取 zstd 压缩的 actions 日志。07~11_*.sh探索过程脚本已弃用从尝试镜像 GitHub actions 到最终确定「自定义DEFAULT_ACTIONS_URL」方案。日常无需执行。12_provision_local_actions.sh幂等创建actions/checkout仓库含action.yml与v1~v5标签。用于从零复建或恢复。凭据集中放在仓库根.envGITEA_URL/GITEA_ADMIN_USER/GITEA_ADMIN_PASS/GITEA_TOKEN。 服务器上 token 同时存于/root/.gitea_token。 Windows 侧用tools/ssh_run.py远程执行从.env读 SSH 凭据避免明文散落。4. 关键修复rc 双重降权 bug现象最初service act_runner start后daemon监护进程本身以act_runner身份运行 并以非 root 调-u act_runner→setusercontext()失败陷入「failed to set user environment」无限重启。根因port 自带 rc 脚本使用${name}_user/${name}_group变量会触发rc.subr自动su -m降权 随后daemon -u再做一次降权二次降权必然失败。修复03_fix_runner_rc.sh已应用到服务器把 rc 变量改名避开rc.subr的 su 钩子——这样daemon以root启动、用-u ${act_runner_runas}完成唯一一次降权。 修复后进程树daemon(root) → act_runner(act_runner)日志稳定打印declare successfully。5. host 模式验证结果实测skywalk/ci-smoke仓库一次真实推送触发的 runwhoamiact_runnerpwd/var/db/act_runner/workspace/.../hostexecutor无容器内核FreeBSD 14.3git/python3/node均在 PATHpython3 -c print(2**32)4294967296Job succeeded总耗时 0.22 秒工具链runner 可见git 2.52 / python3 3.11.14 / node v24.12.0 / bash 5.3 / go / make / gmake。6. actions/checkout 去 GitHub 依赖6.1 背景GitHub 彻底不可达无法镜像官方actions/checkout仓库。三种uses写法实测对比写法结果说明uses: actions/checkoutv4裸写✅ 成功需配合下面「自定义DEFAULT_ACTIONS_URL」uses: http://192.168.1.5:3000/actions/checkoutv4完整 URL✅ 成功永远走本地但业务 workflow 要写长 URLrun: git clone ...手搓✅ 成功最直观但每次都要重复写注意裸写actions/checkoutv4在DEFAULT_ACTIONS_URLgithub时runner 会去 GitHub 拉 action 本体曾实测耗366 秒且常失败——这正是要摆脱的痛点。6.2 最终方案业务 workflow 零改动app.ini的[actions]段含义当 workflow 裸写uses: actions/checkoutv4时Gitea 把actions/checkout解析到本实例的actions/checkout仓库匿名 clone公开仓库无需 token从而完全不碰 GitHub。配套仓库actions/checkout组织actions公开已建好含action.yml纯compositeaction用git直接检出支持ref/token/path/fetch-depth/submodules/clean/lfs不依赖 node / GitHub。标签v1~v5均为同一份action.yml满足不同vx写法。6.3 复建 / 恢复若服务器清空需重建本地actions/checkout脚本幂等仓库/标签已存在则跳过可安全反复执行。7. 给真实仓库接入 CI最小示例在你的仓库根放.gitea/workflows/ci.yml推送到192.168.1.5:3000上的同名仓库即自动触发。查看运行仓库页面 →Actions。8. 常用运维命令9. 排错速查症状可能原因 / 处置act_runner反复重启、日志failed to set user environmentrc 双重降权 bug → 重跑03_fix_runner_rc.sh。uses: actions/checkoutv4卡 300 秒或失败DEFAULT_ACTIONS_URL仍是github→ 改成http://192.168.1.5:3000并重启 Gitea确认actions/checkout仓库存在。runner 不接单检查runs-on标签与 runnerlabels是否匹配service act_runner statusGitea 后台 Actions 是否ENABLED。authentication required拉本地 action 仓库报错仓库未公开或REQUIRE_SIGNIN_VIEWtrue确保仓库 public、REQUIRE_SIGNIN_VIEWfalse本部署已设。SSH 执行时会话 EOF切勿在远程命令里用pkill -f act_runner会误杀ssh_run.py自身命令行改用pkill -x act_runner/pkill -x daemon。10. 已知约束 / 后续host 模式无隔离job 直接在 runner 本机跑与宿主机共享文件系统workspace 在/var/db/act_runner/workspace/。只用于可信的内部仓库。未启用 Docker 执行需要容器化 step 的场景当前不支持本部署刻意不用 Docker。僵死的 ubuntu1 虚拟机按既定决策未动保持现状避免引入新变量。python命令缺失runner 上只有python3业务脚本需用python3或自行alias。实践真不错,AI自动就帮着把所有的细节搞定了!现在再跑CI,比github方便多了!
RELATED

相关推荐

Elementor模板库架构解析:从模块化设计到高性能网站构建的最佳实践

Elementor模板库架构解析:从模块化设计到高性能网站构建的最佳实践

Elementor模板库架构解析:从模块化设计到高性能网站构建的最佳实践 【免费下载链接】elementor The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. 项目地…

📅 2026/10/3 21:42:21
Qwen3.5-9B-DeepSeek-V4-Flash实战指南:高效推理模型架构设计与性能调优深度解析

Qwen3.5-9B-DeepSeek-V4-Flash实战指南:高效推理模型架构设计与性能调优深度解析

Qwen3.5-9B-DeepSeek-V4-Flash实战指南:高效推理模型架构设计与性能调优深度解析 【免费下载链接】Qwen3.5-9B-DeepSeek-V4-Flash-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/Jackrong/Qwen3.5-9B-DeepSeek-V4-Flash-GGUF Qwen3.5-9B-DeepSeek-V4-F…

📅 2026/9/17 9:16:16
Harness平台实战:从CI/CD到AI Agent的工程化部署与运维

Harness平台实战:从CI/CD到AI Agent的工程化部署与运维

1. 项目概述:从“工具”到“平台”的认知跃迁 第一次听说Harness这个词,是在一个关于AI Agent的线上技术分享会上。当时主讲人提到,他们团队在构建一个复杂的智能客服系统时,为了解决Agent的稳定性、可观测性和规模化部署问题&…

📅 2026/9/17 1:45:50
MORE NEWS

更多资讯

📰

Kettle ETL实战:从概念原理到增量抽取与故障排查指南

简介:围绕ETL与Kettle基础主题的PPT讲解资源,面向具备一定编程基础、工作1-3年的研发人员,也适合需要在项目中独立完成数据同步与清洗的开发者。内容基于PDI9.2演示,先从ETL的抽取、转换、加载完整流程讲起,再系统拆解…

📰

AI能力操作系统:大模型时代分层调度与工程落地指南

1. 这张图不是“学习清单”,而是大模型时代的能力操作系统2026年,AI学习早已不是“学Python→学PyTorch→跑通BERT”的线性路径。我亲眼见过太多人:花三个月啃完《深度学习》、把Hugging Face所有模型都试了一遍、甚至能手写LoRA适配器&#…

📰

YOLO猫狗检测数据集实战:从标注格式到训练全流程

做目标检测的朋友应该都有过这种经历:想快速验证一个想法,结果发现光是找数据和整理标注就花了三天。尤其是猫狗识别这种看起来简单、做起来全是细节的任务,数据集的质量直接决定模型上限。最近整理了一份4300张YOLO格式的猫狗检测数据集&…

📰

Ubuntu 24.04下VTK 9.3.1交叉编译Android实战:CMake配置与链接踩坑全记录

最早接到这个任务时,我原本以为只是把桌面版的 VTK 用 CMake 交叉编译到 Android 平台,照着官方文档跑一遍就行。真正动手之后才发现,Ubuntu 24.04 配合 VTK 9.3.1 这套组合,坑点比我想象的多得多,光是解决链接期报错就…

📰

Apache NiFi 与 SNI:TLS 握手失败排查与解决指南

NiFi 跑得好好的,突然有一天某个 InvokeHTTP 处理器开始报错:"Connection reset by peer",或者日志里冒出 "unrecognized_name"。你去机房登进服务器,curl 一下目标地址完全正常,浏览器打开也正常…

📰

华为IPD流程管理核心:DCP决策与TR技术评审机制解析

简介:一份聚焦华为IPD(集成产品开发)流程管理的完整培训PPT,共96页,适合研发管理者、产品经理、项目管理及流程变革相关岗位学习,也便于企业内部导入IPD体系时作为参考课件。内容系统讲解IPD核心目标、核心…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬