Jenkins与Fastlane部署在不同计算机时如何实现连接与触发
Jenkins独立部署在单独设备上完全可以正常触发Fastlane任务,官方文档给出的同机部署只是最低成本的演示场景,不存在同机部署的强制要求,具体落地可以根据你的网络环境选以下三种方案:
方案1:SSH远程执行(通用首选方案)
这是跨设备触发Fastlane最常用的实现方式,配置成本最低,适配绝大多数项目场景:
- 先在部署了Fastlane的构建机上开启SSH远程访问权限,把Jenkins服务运行用户的SSH公钥追加到构建机对应用户的
~/.ssh/authorized_keys列表中,在Jenkins主机上执行ssh 构建机用户名@构建机IP验证可以无密码连通,记得加-o StrictHostKeyChecking=no参数跳过首次连接的主机确认交互。 - 在Jenkins的构建任务中新增执行Shell步骤,直接通过SSH命令远程调用Fastlane即可,参考命令如下:
ssh 构建机用户名@构建机IP "cd /path/to/your/project && export 你需要的环境变量=对应值 && fastlane 你的自定义lane名"
- 配置注意:远程执行模式下不会加载构建机本地终端的交互式shell配置,所有Fastlane依赖的凭证、环境变量不要只配在构建机的
.zshrc/.bashrc里,要么在SSH执行命令前手动export,要么直接写在项目的Fastlane配置文件中,避免执行时出现找不到凭证、命令不存在的报错。
方案2:将Fastlane主机配置为Jenkins从节点
如果后续需要在这台Fastlane构建机上跑更多CI任务,可以直接把它接入Jenkins集群作为从节点,使用体验和官方同机演示完全一致:
- 在Jenkins主节点的节点管理页面新建一个永久代理节点,选择SSH或者JNLP的连接方式,按照引导在Fastlane构建机上启动agent进程,和主节点建立长连接。
- 配置CI任务时,将任务的运行节点绑定到这台Fastlane从节点的标签上,后续任务里写的
fastlane xxx命令会直接在从节点本地执行,不需要额外写远程调用逻辑。 - 配置注意:如果是iOS构建场景,要给Jenkins agent的运行用户开放钥匙串的证书访问权限,提前在构建机上安装好对应版本的Xcode并同意许可协议,避免Fastlane打包时出现签名、环境相关报错。
方案3:轮询触发(适配网络隔离场景)
如果Jenkins主机和Fastlane构建机之间有严格的网络策略限制,不允许Jenkins主动向构建机发起连接,可以用反向轮询的方式实现:
- 在Fastlane构建机上写一个轻量定时脚本,定时请求Jenkins的任务状态接口,检测到有新的构建需求时,本地自动执行对应的Fastlane lane,执行完成后把构建日志、产物包回传到Jenkins即可。
- 这种方案配置维护成本更高,仅推荐网络受限的特殊场景使用,常规场景优先选择前两种方案。
踩坑提示:iOS相关的Fastlane lane必须在安装了对应版本Xcode的macOS设备上运行,不管用哪种触发方式,都不要尝试在Linux/Windows设备上实际执行iOS打包相关的Fastlane任务;安卓相关的Fastlane任务没有系统限制,Linux、macOS、Windows设备都可以正常运行。
内容的提问来源于stack exchange,提问作者Mickael Belhassen
相关产品推荐
相关产品推荐

