xcode编译错误时,并行构建



在CI/CD系统中,当多个并发xcode进程在同一个mac-agent上并行运行时,在处理共享缓存时会出现错误。

错误的例子:❌致命错误:格式错误或损坏的AST文件:'could not find file '…/Pods/Firebase/CoreOnly/Sources/module。模块映射'被AST文件引用'~Library/Developer/Xcode/DerivedData/ModuleCache.noindex/2FKA2K2BK8GI0/ObjectiveC-1KD62J152BYGO.pcm "

在另一个代理上构建时出现以下错误:

❌致命错误:模块文件'~/Library/Developer/Xcode/DerivedData/modulecacheh .noindex/2FKA2K2BK8GI0/Foundation-A3SOD99KJ0S9。Pcm '已过期,需要重新构建:签名不匹配

在xcode进程中添加一个触发器来触发DerivedData中的读写数据移动

如果进程以某种方式继续,那么等待并在一分钟后启动该进程

也考虑隔离构建线程到xcodexcode 13.4.1

我利用ruby编写了这样一个脚本,如果xcodebuild进程已经在代理上运行,该脚本可以简单地挂起其他并行的xcode构建进程。

sleep_time = ((Time.now.to_f - Time.now.strftime("%s").to_f) * 1000000).to_i # 988589 or 153779 or 39680
case
when sleep_time > 300000
sleep_time /= 10000
when sleep_time > 100000 && sleep_time < 300000
sleep_time /= 1000
when sleep_time > 10000 && sleep_time < 100000
sleep_time /= 1000
when sleep_time > 1000 && sleep_time < 10000
sleep_time /= 100
when sleep_time > 300 && sleep_time < 1000
sleep_time /= 10
end
puts("maximal sleep time = #{sleep_time}")
# sleep(Random.rand(sleep_time))
sleep(sleep_time)
loop do
xcodebuildProcess = `ps -A | grep xcodebuild | awk '{print $4}'`
xcodebuildProcesschecker = false
if xcodebuildProcess.match("Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild")
xcodebuildProcesschecker = true
puts 'find Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild'
sleep(30)
else
xcodebuildProcesschecker = false
puts("xcodebuild process is not running")
break
end
break if xcodebuildProcesschecker == false
end
sh("ls -la ~/Library/Developer/Xcode/")
sh("ls -la ~/Library/Developer/Xcode/DerivedData/") if Dir.exists?("~/Library/Developer/Xcode/DerivedData/")
sh("rm -rf ~/Library/Developer/Xcode/DerivedData/")
sh("ls -la ~/Library/Developer/Xcode/")

最新更新