资讯动态

本地代码托管 + CI/Workflow(FreeBSD 自建 Gitea Actions)

发布时间:2026/8/12 23:13:08 来源:尧图企业网站定制
问题我在近期开发项目的时候碰到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方便多了!

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价