Perforce配置change-submit触发器无法运行代码库内Ruby脚本问题
Perforce触发器调用仓库内Ruby脚本找不到文件问题的原因与解决办法
问题原因
Perforce触发器支持调用仓库中存储的文件,不代表系统命令可以直接识别Perforce的仓库depot路径(//xxx/xxx格式):
- Ruby解释器只能读取本地文件系统的实际路径,无法解析Perforce专属的仓库路径格式
- Perforce服务端运行触发器时,不会自动将仓库内的目标脚本同步到服务端的本地存储中,直接填写仓库路径会导致Ruby在服务端本地文件系统搜索对应路径时匹配不到文件
- 配置中用到的
%quote%变量仅用于处理路径中的特殊字符、空格转义,没有将仓库路径转换为本地路径的作用
解决办法
推荐使用更稳定的本地工作区同步方案:
- 首先在Perforce服务端主机上创建专属的触发脚本存储目录,例如
/data/p4_trigger_scripts(Linux)或D:\p4_trigger_scripts(Windows) - 为Perforce服务端运行账号配置专属工作区,将
//HVS/Main/BuildScripts/...路径映射到刚才创建的本地目录 - 配置定时任务,或者每次更新触发脚本后手动执行
p4 sync命令,将仓库中最新版本的脚本同步到服务端本地目录 - 修改触发器配置,将脚本路径替换为服务端本地的实际路径,示例如下:
jenkins change-submit //... "ruby %quote%/data/p4_trigger_scripts/notify_jenkins.rb%quote%"
如果是轻量使用场景不想维护工作区,可以用临时拉取脚本的方案,直接修改触发器配置为:
jenkins change-submit //... "p4 print -o /tmp/notify_jenkins.rb //HVS/Main/BuildScripts/notify_jenkins.rb && ruby %quote%/tmp/notify_jenkins.rb%quote%"
注意:该方案需要处理临时文件的权限与并发冲突问题,高频率提交场景下不推荐使用
内容的提问来源于stack exchange,提问作者Ryan Glenn
相关产品推荐
相关产品推荐

