在 macos 上搭建持续交付工作流需确保 runner 稳定在线、配置精简的 ci 文件、ssh 免密安全连接、本地资源兜底;关键步骤包括用 homebrew 安装 gitlab runner、shell executor 注册、分 build/test/deploy 三阶段、scp/rsync 部署、ed25519 密钥认证、禁用休眠与 spotlight、清理缓存及资源监控。
在 macos 上搭建持续交付(cd)工作流,核心是让代码从提交到上线全程自动化、可验证、可回滚。它不依赖 jenkins 等外部调度器,gitlab ci 或 github actions 原生能力就足够——关键在于本地环境可控、部署通道可靠、流程反馈及时。
Runner 安装与可信注册
macOS 作为 Runner 主机,优势在于硬件统一、命令行原生、调试直观,但需确保其稳定在线并具备执行权限:
- 用 Homebrew 安装:
brew install gitlab-runner(GitHub Actions 则直接使用官方 runner binary) - 注册时选择 shell executor:适合本地构建与 SCP/RSYNC 部署,避免 Docker 权限或虚拟化开销
- 勾选 “Run untagged jobs” 或为 job 显式指定
tags: [mac, deploy],避免任务被闲置 Runner 拦截 - 确认 Runner 状态为 online 且关联到目标项目 —— 这是 pipeline 能触发的第一道门槛
.gitlab-ci.yml 或 workflow 文件精简设计
配置文件不是越复杂越好,而是要清晰分阶段、有明确出口、能快速定位失败环节:
-
stages 建议只保留
build→test→deploy,避免冗余阶段拖慢反馈 -
build 阶段输出
artifacts(如dist/或bin/),供后续 stage 直接复用,不重复打包 -
deploy 阶段优先用
scp或rsync推送,脚本开头加set -e确保任意命令失败即中断 - 用
rules:替代旧版only:,例如:if: $CI_COMMIT_BRANCH == "main",语义更明确、支持条件嵌套
SSH 免密与目标服务器加固
部署动作卡住,90% 出在 SSH 通道上。macOS 本地 Runner 到远程服务器的连接必须“静默、安全、可审计”:
- 生成专用密钥:
ssh-keygen -t ed25519 -C "cd-runner@mac" -f ~/.ssh/cd_deploy - 推送公钥:
ssh-copy-id -i ~/.ssh/cd_deploy.pub user@host,测试ssh -i ~/.ssh/cd_deploy user@host是否免密登录 - 目标服务器限制:在
/etc/ssh/sshd_config中设置AllowUsers和ForceCommand(如仅允许rsync或unzip),避免 shell 泛权限风险 - 敏感信息不硬编码:用 GitLab CI Variables 或 GitHub Secrets 存
DEPLOY_HOST、DEPLOY_USER,脚本中引用$DEPLOY_HOST
本地资源与稳定性兜底
macOS 不是服务器,需主动规避系统休眠、Spotlight 占用、内存压力等问题:
- 禁用自动休眠:
sudo pmset -a disablesleep 1(Runner 运行期间),完成后恢复:sudo pmset -a disablesleep 0 - 暂停 Spotlight 索引:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist(CI 运行前) - 清理缓存释放内存:
rm -rf ~/Library/Caches/* /private/var/folders/*可作为 job 开头 step,尤其对 Node.js 或 Python 构建有效 - 监控资源:在 deploy 前加
top -o cpu -l 1 | head -10或df -h,超阈值则exit 1中断流程











