手动打包、手动上传是一件非常烦琐的事件,通常会浪费开发者大量的时间,这时候自动打包与分发就起到的重要的角色。目的主要要实现以下几个功能:
- 从git拉取最新代码
- 根据配置打包ipa
- 自动分包到pgyer或fir
- 邮件通知相关人员
本文将一步步实现上述功能:
安装Fastlane
需要Ruby2.0+ 环境,Mac系统细带Ruby环境,但是涉及很多权限问题,建议另外rvm来管理ruby
安装RVM & Ruby
Install RVM stable with ruby:
1 | \curl -sSL https://get.rvm.io | bash -s stable --ruby |
等待一段时间后就可以成功安装好 RVM。
然后,重新打开 Termal ,会自动重新载入rvm环境,如果没有执行以下代码
1 | source ~/.bashrc |
rvm -v ruby -v
查看是否安装正确
rvm list
查看已经安装的ruby版本
切换ruby
1 | rvm use 2.3.1 |
设置rvm默认版本
1 | rvm --default 2.3.1 |
安装fastlane
1 | gem install fastlane -NV |
工程配置fastlane
bundler是gem包管理工具,建议通过gemfile管理gem包
进入工程目录,创建Gemfile
1 | source "https://gems.ruby-china.com/" |
1 | bundle install --path vendor/bundler |
--path vendor/bundler
表示我們希望把程式安裝在當前的目錄底下,而不是安裝到系統檔案夾如 /usrlocalbin 或 usrbin 裡面,這樣你的 project 就不會跟你的系統有任何掛勾了。
会在工程目录下生成vendor目录,管理gem包
請記得將 vendor 這個資料夾加入 .gitignore 之中。
初始化一個 fastlane
1 | bundler exec fastlane init |
\1. 📸 Automate screenshots
\2. 👩✈️ Automate beta distribution to TestFlight
\3. 🚀 Automate App Store distribution
\4. 🛠 Manual setup - manually setup your project to automate your tasks
选择4 自定义
通过fastlane打包并上传pgyer
1 | fastlane add_plugin fir/pgyer |
编辑fastlane文件
1 | default_platform(:ios) |
执行打包任务:
1 | fastlane keji |
通过jenkins做上传pgyer的步骤:
fastlane不用安装pgyer插件
推荐通过gym 做fastlane打包(命令更灵活)相关的fastfile:
fastlane gym -h 查看支持的命令
1 | default_platform(:ios) |
fastlane gym 打包命令:
1 | fastlane gym (--export_method development --scheme ${IPANAME} --output_directory ${OUTPUTDIC} --include_bitcode false --include_symbols false --clean true) |
关于gym命令:fastlane gym 中可以—增加参数都可以生效,但是在fastfile中 设置参数有些无效,不知道是不是姿势错误…
关于Ad-hoc 需要configuration设置为release: –export_method ad-hoc –configuration Release ,
安装Jenkins
安装jenkins
推荐通过homebrew安装jenkins (或者通过war包安装 注意需要jdk 8,参考)
1 | brew install jenkins |
启动jenkins
1 | jenkins |
访问jenkins
1 | http://localhost:8080 // 打开jenkins可视化页面` |
新建任务:
选择自由风格
如果构建代码是通过git获取,需要先设置git 密码或者SSH,
Source code > git
Build > 执行shell
1 | IPANAME="OnstreetSaaS" |
关于邮件通知:
可以自己在jenkins 系统设置 配置smtp邮件发送,在Post-build Actions> 增加邮件发送
但是由于我们用pgyer,直接用pgyer的邮件服务就可以。