一 前言
本教程结合Jenkins
、Fastlane
和蒲公英
对iOS
和Android
实现自动化打包并上传蒲公英,详细说明了打包的jenkins配置
、fastlane脚本配置
并上传到蒲公英。然而,针对安装jenkins
并没有详细的大量篇幅说明,若安装jenkins
出现问题,可自行Google
或去官方网站
查询,资料很多,这里并不一一列举。
二 环境
本文主要针对React Native
项目对iOS
和Android
进行打包,笔者也亲自实践过原生项目的打包,除了路径不一样,其余都是一模一样的。
环境如下:
1 | React Native Environment Info: |
三 安装
3.1 安装Jenkins
- 3.1.1 升级ruby
由于
fastlane
依赖ruby环境
,默认情况下,Mac
下得ruby
或者版本比较低,这取决于你的系统,但是建议对其进行升级到最新版本,以免后续出错。
3.1.1.1 查看当前ruby
版本:
1 | ruby -v |
3.1.1.2 安装rvm
(Ruby Version Manager)
注:fastlane官方建议使用rbenv来安装和管理ruby
。事实上,使用rvm
已经足够,取决于个人的选择。
1 | \curl -sSL https://get.rvm.io | bash -s stable --ruby |
3.1.1.3 退出终端,重新打开,查看是否安装成功
1 | rvm -v |
3.1.1.4 列举出ruby所有版本
1 | rvm list known |
3.1.1.5 升级ruby
1 | rvm install 版本号 // 注意:这个版本号是你刚才列举出来的ruby所有版本号之一,一般选择最新的即可 |
- 3.1.2 安装
Jenkins
1 | brew update && brew install jenkins |
若遇到问题,请查看Jenkins官网 或 自行Google
。
注:不推荐直接下载
pkg
包直接安装。
3.2 安装xcode
打包所需命令行工具
1 | xcode-select --install |
3.3 安装fastlane
- 方式一,使用
Homebrew
安装
1 | brew cask install fastlane |
- 方式二, 使用
RubyGems
安装
1 | gem install fastlane -NV |
对于方式二,若遇到无执行权限,可尝试:
sudo gem install fastlane -NV
。
3.4 设置环境变量
将一下命令添加到你的~/.bashrc
, ~/.bash_profile
, ~/.profile
或者 ~/.zshrc
中:
1 | export LC_ALL=en_US.UTF-8 |
注:添加的目的是保证
fastlane
能够在utf-8
编码环境下执行,否则在未设置utf-8
为默认编码的系统上,fastlane
运行可能会出现错误❌。
接着使其生效:
1 | source ~/.bashrc |
注:如果你是添加到
~/.bashrc
中,就使用source ~/.bashrc
; 若你是添加到~/.bash_profile
中,就使用source ~/.bash_profile
,以此类推。
四 初始化
4.1 使用Gemfile
(可选,但是建议安装)
注:这只是
fastlane
官方推荐,原因如果我们使用Gemfile
文件的话,我们可以使用它来定义fastlane
的相关依赖,其次这也可以让我们现在所使用到的fastlane
版本一目了然,并且还可以加快fastlane
命令的执行,这不是必须的步骤!!!
- 4.1.1 在工程根目录下(xxx.xcodeproj所在目录)创建
Gemfile
(一般是根目录,如果是
React Native
项目,则在ios
目录下,Android
的话进入.../android
目录下,Android
没有scheme.xcodeproj
)
1 | touch Gemfile |
- 4.1.2 将以下内容添加到刚才创建的
Gemfile
文件中
1 | source "https://rubygems.org" |
- 4.1.3 安装
bundle
命令
请依次执行以下命令:
1 | bundle install |
注1:如果以上执行没有权限,请在前面添加
sudo
命令。以上会生成Gemfile
和Gemfile.lock
文件,可以提交到版本控制系统git
中。
注2:后面执行
fastlane
命令的时候,我们就可以使用bundle exec fastlane [lane]
, 后面的[lane]
代表你在Fastfile
文件里面配置的lane项
,比如:bundle exec fastlane topgyer
命令中的toppgyer
。
注3: 如果要更新
fastlane
,也可以使用:[sudo] bundle update fastlane
命令。
4.2 初始化fastlane
cd
到scheme.xcodeproj
所在目录(一般是根目录,如果是React Native
项目,则在ios
目录下,Android
的话进入.../android
目录下,Android
没有scheme.xcodeproj
)
1 | fastlane init |
出现:What would you like to use fastlane for?
答:4
根据提示选择相应的提示项,一路往下走即可。
五 添加插件
这里我们添加的是蒲公英
插件:
1 | fastlane add_plugin pgyer |
六 修改配置
6.1 iOS
cd
到ios/fastlane
目录下,修改Fastfile
文件,替换所有内容为:
1 | # 打包平台 |
iOS注意:
Fastfile
文件中加❣️的地方为必填项,其他地方基本不用改动即可直接打包,如果想自己改动或添加其他参数也可以,自行
6.2 Android
cd
到anddroid/fastlane
目录下,修改Fastfile
文件,替换所有内容为:
1 | default_platform(:android) |
Android注意:
Fastfile
文件中加❣️的地方为必填项,其他地方基本不用改动即可直接打包,如果想自己改动或添加其他参数也可以,自行
七 打包上传
7.1 本地直接打包
(一般是根目录,如果是
React Native
项目,则在ios
目录下,Android
的话进入.../android
目录下,Android
没有scheme.xcodeproj
)
1 | fastlane UploadToPgyer |
7.2 使用Jenkins
打包
说明:在使用
Jenkins
打包之前,请先尝试7.1
能够在本地打包成功,因为Jenkins
只是一个工具,最终执行还是本地fastfile
文件中的脚本,若本地打包失败,意味着你在jenkins
上配置出来打包必然失败。
jenkins
安装好后,配置以及创建项目这里就直接忽略,有问题自行Google
。接下来直接进入配置项。
- 7.2.1
general
- 7.2.2 源码管理
7.2.3 构建触发器(不需要,可跳过)
7.2.4 构建环境
- 7.2.5 构建
shell脚本
如下(可直接复制粘贴使用,需要修改的地方以下有说明):
1 |
|
- 7.2.6 构建后操作(不需要,可跳过)
八 Jenkins打包报错
- ❌
(iOS)
error: Can’t find ‘node’ binary to build React Native bundle
这个报错一般针对
React Native
工程,原生项目不会。
✅ 打开xcode
, Build Phases
-> Bundle React Native code and images
里面的脚本默认看起来是下面这个样子👇
1 | export NODE_BINARY=/usr/local/bin/node |
在terminal
上输入:
1 | which node |
比如我电脑上💻的输出结果是:
1 | /usr/local/bin/node |
将/usr/local/bin/node
替换脚本中的node
即可,即最终结果看起来如下👇:
1 | export NODE_BINARY=node |
- ❌ ❌
Android
1 | FAILURE: Build failed with an exception. |
✅✅ 本地进入到项目的 ./android
目录下,执行
1 | ./gradlew --stop |
答案源自: github
然后重新尝试打包,应该就OK
了。