Jenkins调用iOS slave的缓存问题解决方法

Jenkins调用iOS slave的缓存问题解决方法

今天,在使用jenkins执行iOS编译的时候,遇到一个问题,创建的这个job编译结果中缺少一个.h头文件,

问题描述

在创建公司iOS产品的编译构建job时,创建完job后运行,发现输出结果中缺少一个库文件。开发人员在mac环境中调整了xcode输出配置,增加了该头文件的输出,并验证能够产生文件后,代码重新上传到Gitlab。然后我在jenkins服务器上重新运行xcodebuild进行编译,结果无论如何也不能产生该头文件。

问题定位过程

  1. 开发人员对比了本地xcodebuild输出结果跟jenkins编译时的输出结果,发现jenkins在生成头文件过程中缺少了PBXCP的输出:
    PBXCp /Users/workspace/Mobile-iOS-Products-SignetSDKCore-All/Signet-SDK/Signet-SDK/include/SignetManager.h /Users/baiyu/bjcaci/workspace/Mobile-iOS-Products-SignetSDKCore-All/Signet-SDK/build/Release-iphoneos/include/Signet-SDK/SignetManager.h (in target ‘Signet-SDK’ from project ‘Signet-SDK’)
    cd /Users/workspace/Mobile-iOS-Products-SignetSDKCore-All/Signet-SDK
    builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -strip-debug-symbols -strip-tool /Applications/Xcode11.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -resolve-src-symlinks /Users/baiyu/bjcaci/workspace/Mobile-iOS-Products-SignetSDKCore-All/Signet-SDK/Signet-SDK/include/SignetManager.h /Users/baiyu/bjcaci/workspace/Mobile-iOS-Products-SignetSDKCore-All/Signet-SDK/build/Release-iphoneos/include/Signet-SDK
    2.检查其他成功的项目build,发现PBXCp命令能够被执行。
    于是我怀疑,是不是跟原来job已经执行过,导致每次重新执行的时候,直接使用缓存的配置执行xcodebuid,导致结果不正确。
  2. 开发按照这个思路 , 将iOS 上workspace中的代码挪到另一个目录,然后运行xcodebuild,发现可以生成出这个头文件。 确认了是缓存问题导致的编译问题。
  3. 于是我尝试更改job名称,重新运行job。然后发现结果跟预期一致。

在找到正确的路之前,google了各种方法,没有找到解决方案。

问题分析

梳理问题过程:

  1. 最开始的时候,jenkins job执行xcodebuild的缺少头文件导出功能;
  2. 开发调整了iOS Xcode的配置以后,增加了头文件的导出功能。
  3. jenkins job配置了在build前清除workspace,但是运行xcodebuild仍然没有产生头文件;
  4. 直接通过VNC viewer登录iOS系统,运行xcode,是可以产生头文件的;(中间尝试了多次)
  5. jenkins job不能产生头文件,只好对比2次xcodebuild的输出结果,发现缺少PBXCp步骤;
  6. 检查其他job,能够正常运行PBXCp命令;
  7. 怀疑跟缓存有关系,然后拷贝workspace下的job 代码到另一个位置运行,运行结果正确,可以产生头文件;
  8. 确认缓存问题,更改jenkins job名称,问题解决。

问题解决方案更新20200628

今天再次碰到开发人员删除了Gitlab上的一个文件,导致jenkins job运行失败。跟开发人员确认了xcode缓存的位置:
/Users/<用户名>/Library/Developer/Xcode/DerivedData

然后在编译脚本中,添加

rm -rf /Users/<用户名>/Library/Developer/Xcode/DerivedData/*

job编译成功,终于从根上解决了这个问题,不用再改job名称了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值