注:本附加篇紧接上一篇IOS打包测试发布环境配置-下篇,是对上一篇脚本文件的改进并添加了新的功能,主要是iOS自动定时打包功能的实现。
对于原有脚本的改进:在任意目录均可执行打包脚本。
关于crontab
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序
cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
- /sbin/service crond start //启动服务
- /sbin/service crond stop //关闭服务
- /sbin/service crond restart //重启服务
- service crond status //查看crontab服务状态:
- service crond start //启动crontab服务:
crontab服务是否已设置为开机启动
# ntsysv
设置crond开机自动启动:
# chkconfig --level 35 crond on
MAC 下默认开启,不用配置。
管理cron计划任务
(a) 编辑计划任务:crontab -e [-u 用户名]
(b) 查看计划任务:crontab -l [-u 用户名]
(c) 删除计划任务:crontab -r [-u 用户名]
编辑添加定时任务
1 打开终端 输入 crontab -e 进入vim编辑器
2 输入i 进入编辑模式,复制粘贴如下命令,(你的脚本路径)
3 esc 退出编辑模式 输入:wq 保存退出
4 crontab -l 查看定时任务
5 crontab -r 删除定时任务
12 15 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Debug.sh
17 15 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Enterprise.sh
18 15 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Release.sh
上面三行命令分别表示
- 每天的 15:12分执行 fir_abs_Debug.sh 脚本
- 每天的 15:17分执行 fir_abs_Enterprise.sh 脚本
- 每天的 15:18分执行 fir_abs_Release.sh 脚本
编辑完成后就等待脚本的执行。
一般执行crontab -r 删除自动任务时你会收到一个邮件,这里面是具体执行脚本的编译提示
具体要根据每个用户的用户名,确定位置;
Zhifei-de-MacBook-Pro:mail marvis$ crontab -r
You have mail in /var/mail/marvis
可能出现的问题如下截图
查阅了各种资料来回折腾,最后在这篇帖子找到了解决方案,原来是默认情况下钥匙串放在登录用户账户中的root账户下,普通的登录用户在终端环境下没有运行没有问题,但是在cron命令执行环境与终端不一致所以需要修改证书的位置。由登录用户改成系统用户即可。
还用一种方案是创建系统的cron任务 不过该方案我试验没有成功,具体原因没有找到。也可以启动root账户
此时需要在进入vim编辑器后首先输入shift+,保存退出后即可创建任务
如下几种错误
以上几种错误都是由于cron命令环境与终端环境不一致造成的
可以再脚本中添加PATH解决,
或者是使用ruby version manage 即rvm cron setup 终端命令在创建任务上面添加PATH路径解决
可以先查看一下ruby的位置
README: No such file or directory
那是因为你的脚本目录下没有README的文件,只需要建一个README的文件就行了,打开终端,cd到当前位置,然后执行下面的命令:
touch README
编译打包文件成功后,可以看到时间与我们任务定义的打包时间一致
未解决的问题
上传fir时一直报错,找不到bundle ,升级了ruby还是没有解决,看来cron还是有许多坑。如果哪位大神解决了,烦请贴出来,大家相互学习!
如果添加 &> /dev/null 到xcodebuild 命令后面,则xcodebuild 编译产生的信息豆浆杯扔进无底洞,不会输出到 /var/mail/marvis 文件中
参考链接
Shell中获取脚本所在目录绝对路径的方法
关于RVM
Gem bundler is not installed, run gem install bundler
first.
Where is ruby stored on mac?
Fix Rubygems binary error: undefined method `activate_bin_path' for Gem:Module (NoMethodError)
Getting Ruby scripts working with bundler, rvm and cron
我是一道华丽的分割线- 4.22更新
更新内容
- 解决上传fir-im报错问题
- 优化脚本添加配置参数,可在脚本后面添加执行参数
参数:0 、1、2 分别代表编译Debug 、Enterprise、Release版本;
也可直接使用参数:Debug 、Enterprise、Release
上传fir-im报错问题
报错内容
/Users/marvis/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems.rb:270:in `find_spec_for_exe': can't find gem fir-cli (>= 0.a) (Gem::GemNotFoundException)
from /Users/marvis/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems.rb:298:in `activate_bin_path'
from /usr/local/bin/fir:22:in `<main>'
from /Users/marvis/.rvm/gems/ruby-2.4.1@global/bin/ruby_executable_hooks:15:in `eval'
from /Users/marvis/.rvm/gems/ruby-2.4.1@global/bin/ruby_executable_hooks:15:in `<main>'
解决方案
1 将.gemrc重命名为.gemrc_backup(我也不知道为什么!)
2 将gem镜像换成ruby-china 确保只有 gems.ruby-china.org
之前来回折腾,换了淘宝源,还是不行
3 重新安装fri-cli。 后面发现pod命令也出错了,然后cocoapod也重新安装了
具体操作命令顺序如下
$ mv ~/.gemrc ~/.gemrc_backup
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l https://gems.ruby-china.org
$sudo gem install fir-cli
$sudo gem install cocoapods
优化脚本添加配置参数
修改脚本内容
然后重新设计打包的脚本
source ~/.profile
###############设置需编译的项目配置名称
buildConfig=$1
case $buildConfig in
0)
echo "当前编译模式为 Debug"
buildConfig=Debug;;
Debug)
echo "当前编译模式为 Debug";;
1)
echo "当前编译模式为 Enterprise"
buildConfig=Enterprise;;
Enterprise)
echo "当前编译模式为 Enterprise";;
2)
echo "当前编译模式为 Release"
buildConfig=Release;;
Release)
echo "当前编译模式为 Release";;
*)
echo "编译模式报错"
echo "编译模式必须为Debug 0,Enterprise 1,Release 2中的一种"
exit
;;
esac
#编译的方式有,Debug,Release,自定义的 DebugOn,DebugOnlineArch,Enterprise等
重新编译配置crontab任务
#sm start rvm
PATH="/Users/marvis/.rvm/gems/ruby-2.4.1/bin:/Users/marvis/.rvm/gems/ruby-2.4.1@global/bin:/Users/marvis/.rvm/rubies/ruby-2.4.1/bin:/Users/marvis/.rvm/gems/ruby-2.4.1/bin:/Users/marvis/.rvm/gems/ruby-2.4.1@global/bin:/Users/marvis/.rvm/rubies/ruby-2.4.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/marvis/oracleclient_12_1:/usr/local/mysql/bin:/Users/marvis/Library/Android/sdk/platform-tools:/Users/marvis/.rvm/bin"
GEM_HOME='/Users/marvis/.rvm/gems/ruby-2.4.1'
GEM_PATH='/Users/marvis/.rvm/gems/ruby-2.4.1:/Users/marvis/.rvm/gems/ruby-2.4.1@global'
MY_RUBY_HOME='/Users/marvis/.rvm/rubies/ruby-2.4.1'
IRBRC='/Users/marvis/.rvm/rubies/ruby-2.4.1/.irbrc'
RUBY_VERSION='ruby-2.4.1'
#sm end rvm
23 9 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Debug.sh 0
24 9 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Debug.sh 1
25 9 * * * sh /Users/marvis/Desktop/GitWorkSpace/AutoBuildConfigSet-Demo/AutoBuildConfigSet-Demo/fir_abs_Debug.sh 2