使用 CI 构建 React Native 项目
网上已经有很多教程了,我这边也整理一份我跑通的流程。
iOS 构建部分
首先参照 官方文档 调整代码
其中文档中需要在 Xcode 下构建的部分,使用命令行来操作就是:
xcodebuild archive -project ios/$PROJECT.xcodeproj
-scheme $PROJECT
-archivePath ios/build/$PROJECT.xcarchive
xcodebuild -exportArchive
-archivePath ios/build/$PROJECT.xcarchive
-exportPath ios/build/
-exportOptionsPlist ios/ExportOptions.plist
-allowProvisioningUpdates
要点:
- 绝大多数构建参数都可以用 Xcode 打开项目调整。
ExportOptions.plist
在使用 Xcode 手动 Export 一次之后会自动生成。- 在 archive 阶段时配置环境变量
RCT_NO_LAUNCH_PACKAGER=1
会跳过调用构建服务器的步骤。 - 因为
project.xcworkspace
目录是会被 React Native 脚手架 gitignore 的,所以网上很多基于-workspace ios/$PROJECT.xcodeproj/project.xcworkspace
都是不能直接用 CI runner 跑的。使用-project ios/$PROJECT.xcodeproj
可以解决。 - 注意不要丢失
ios/$PROJECT.xcodeproj/xcshareddata/xcschemes/$PROJECT.xcscheme
文件,该文件很容易在 Xcode 配置时丢失或转入被 gitignore 的 xcuserdata 目录。
Android 构建部分
Android 构建方面相对简单,参照 官方文档 签名即可
我不愿意在 CI 中改变当前目录,所以我的命令行是:
android/gradlew assembleRelease --project-dir android
要点:
- 手机跑不了未签名的 Release 包,而 Debug 包一定要连接构建服务器。
- GitLab Runner 在使用 shell 模式下不会加载我的
.zshrc
/.zprofile
,所以ANDROID_HOME
这种环境变量请存在~/.profile
中。 - keystore 文件是会被 gitignore 的,存在仓库里也不安全,在部署 CI Runner 的时候记得把 keystore 文件拷过去。