本篇总结fastlane gym打包和jenkins配置的相关问题。


一、fastlane gym打包

1、gym可以理解为,实质是fastlane内的一个组件。fastlane是由ruby封装的xcodebuild命令,通过查阅官方github可以看到它的安装命令和使用简介。
fastlane github地址为:https://github.com/fastlane/fastlane
gym github地址为:https://github.com/fastlane/fastlane/tree/master/gym
fastlane使用命令直接安装:

1
2
3
sudo gem install fastlane --verbose
xcode-select --install
gem cleanup

gym使用命令安装:

1
2
sudo gem install gym
xcode-select --install

2、本次只是为了打ipa包,我直接选择使用gym命令,最后命令为:

1
2
3
4
5
gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration
${configuration} --xcargs "PRODUCT_BUNDLE_IDENTIFIER='${bundle_id}'
PROVISIONING_PROFILE='${rightProvision}'" --archive_path ${archive_path}
--codesigning_identity "${rightDistributionSign}" --export_options
${ExoptionPlist} --output_directory ${ipa_path} --output_name ${ipa_name}

3、遇到的问题
问题:–export_options ${ExoptionPlist}之前会出错,是因为之前按照gym -h查看帮忙命令的时候,有–export_options [value]存在,一直写的是–export_options [plist]。
解决:过程就不详细描述了,看了源码中关于–export_options的介绍,这里应该是指明path,不需要指明[value]中值。


二、配置jenkins master和slave

1、因为jenkins master和slave已经配置好了,由于没有真的配置master和slave,侧面了解了一些概念,jenkins在“管理界面“可以方便的添加节点,配置节点时候,这里的节点可以理解为slave,需要节点所在机器的登陆用户名和密码,涉及到mac slave,需要在共享界面,打开任意用户可以登陆并且打开远程连接和屏幕共享。
需要注意的是slave不需要再按照jenkins,jenkins会自动启用slave agent,将build需要的tools拷贝到远程服务器。而且每次构建的结果应该都是存放在master上的,不需要在各个节点去查看build产生的结果文件。
2、遇到的问题
(1)gym command not found
解决:Inject environment variables to the build process或在命令行执行前直接
export PATH=$PATH:/usr/local/bin都可解决。
(2)mac slave中shell被更改
解决:通过命令行打印echo SHELL确认当前slave启动的shell,然后通过命令sudo chsh -s /bin/bash改为默认的shell。
(3)gym报错invalid byte sequence in US-ASCII (ArgumentError)
解决:在jenkins命令行执行前export RUBYOPT="-KU -E utf-8:utf-8"或者导入变量

1
2
3
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

(4)gym报错Exit status: 65
解决:在jenkins命令行执行前导入export MallocNanoZone=0
(5)老问题slave上命令行可以正常执行,jenkins中一直报错archive failed
解决:这个问题的解决过程十分漫长,原因是一直关注的是jenkins log,没有看到明显的报错日志,再加上上面遇到的这么多问题,一直在重复的打包,查报错日志,最后把关注点放在了gym执行报错的日志中,查到一句是User interaction is not allowed,这个时候才确认是因为权限问题。
解决只有两个步骤:首先在mac slave上打开钥匙串,然后在系统内找到证书然后授权让所有用户可以使用
其次在jenkins中执行

1
2
security -v unlock-keychain -p "password" "$HOME/Library/Keychains/
login.keychain"

(6)archive the artifacts一直配置报错
解决:在workspace下配置相对路径即可。