Jenkins+GitLab+xCode+Fir 持续集成开发

插件准备

Manage Jenkins -> Manage Plugins -> Available -> Filter
安装Git Plugin、Xcode Plugin、GitLab Plugin、
Environment Injector Plugin四个插件

jenkins配置

Manage Jenkins -> Configure System
配置Git

配置Keychain

配置GitLab

Gitlab配置部分,填写Gitlab host URL(例如:http://gitlab)、API Token(查看Gitlab个人账号里面的API Token值),勾选Ignore SSL Certificate Errors

job配置

创建job

第一次使用Freestyle project 下次可以直接copy这个项目的配置

配置gitlab connetion 和 job name

设置jenkins版本保留时间

配置要编译的版本choices就是你远程库对应的分支名称

1
2
3
4
5
6
7
8
9
10
remotes/origin/dev_build
remotes/origin/master
remotes/origin/test
remotes/origin/tmp
remotes/origin/v1.1.0
remotes/origin/v1.2.0
remotes/origin/v1.3.0
remotes/origin/v1.3.0_dev
remotes/origin/v1.4.0_dev
remotes/origin/v1.5.0_dev

配置远程仓库对应的地址,和授权用户

配置环境变量

注意target 名称不能有空格,否则编译之后脚本运行会出错,当时这边我使用项目原有的target去Duplicate一个新的target之后,workspace 会生成一个target copy的scheme,这个scheme要改掉,中间不能有空格,我改成了target_dev

控制编译版本实现自增形式来区分每个构建的不同


这里为了给测试人员区分debug和release版本,原来计划通过更改bundleid,后来发现不是最优的,因为测试人员要求debug和release版本要有不同的icon,这样我不得不在build的时候去更改的appicon,需要些一堆的脚本,想想都麻烦的要死,具体怎么做可以看这里How To Change Your App Icon at Build Time。后来选择另一种方法,在项目原有的target Duplicate出一个target来区分。

xcode 构建设置


不同的bundleid需要对应不用的provisioning file,在jenkins环境中的/Users/{username}/Library/MobileDevice/Provisioning Profiles目录下面,这里也可以不填写对应的provisioning file 名称,因为build的时候会自动去找最新的file来完成进行签名

将生成的app打包成ipa

将打包好的ipa上传到fir,具体怎么操作可以去fir.im的官网Tool下看具体教程
fir.im Jenkins 插件使用方法

1
fir publish ${BUILD_DIR}/${TARGET}.ipa -p -T fca939....cde93

第一次build是会报出sode sign的错误,这是你需要去你的jenkins所以电脑上的工程路径中编译一次,然后系统会弹出证书是否允许访问的玩意,点击始终允许就OK了。如果在编译的时候收到no scheme的错误提示,需要到所在的工程目录下运行如下命令,会列出错有scheme要是没有需要在你的工程中的manage scheme 将所有的scheme都勾选上就可以了

1
2
3
4
5
6
7
8
9
KingxiqueWorkPlatform_Dev-Info.plist test-reports
tudadeMac-Pro:workspace tuda$ xcodebuild -list -workspace KingxiqueWorkPlatform.xcworkspace
Information about workspace "KingxiqueWorkPlatform":
Schemes:
KingxiqueWorkPlatform
KingxiqueWorkPlatform_Dev
AFNetworking
BlocksKit
CocoaSecurity

到这里就大功告成