Gitlab-Ci
配置Xcode
Xcode唯一需要配置的就是要将你运行的scheme
设置成Shared
。
- 打开Xcode项目
- 选择Product > Scheme > Manage Schemes
- 将对应的scheme勾选上Shared
安装 配置 GitLab Runner
下载runner到本地
sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
//修改目录权限
sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
这样就完成了Runner的安装,接下来要为工程注册一个Runner,本地注册Runner需要GitLab项目的CI地址和Token,打开到GitLab,进入对应项目选择 Setting-Runners ,
点击Runners
如下图所示,我们可以看到提示。
configRunner.png
知道 URL 和 Token 之后就可以就可以注册Runner了
gitlab-ci-multi-runner register
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
//输入之前的URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
https://xxxx.com/ci
//输入token
Please enter the gitlab-ci token for this runner:
<CI runner token from Project > Settings > Runner>
//描述,这个随意了,一般用默认的就好
Please enter the gitlab-ci description for this runner:
[Your-Mac\'s-Name.local]:
//runner的tag,这个是用于执行脚本时指定runner用的,所以最好起一个比较容易区分的
Please enter the gitlab-ci tags for this runner (comma separated):
test_machine
Registering runner... succeeded runner=724a60b5
//runner的执行器,因为Xcode项目需要用xcodebuild来执行,所以选shell
Please enter the executor: virtualbox, ssh, shell, parallels, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running
already the config should be automatically reloaded!
这时候再刷新GitLab项目的 Runner 界面就会看到一个 Active Runner 了
确认好了之后可以启动 Runner 了。
cd ~
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start
编写 yml 配置文件
stages:
- build
- archive
build_project:
stage : build
script :
- xctool -workspace XXX.xcworkspace -scheme parent clean
- xctool -workspace XXX.xcworkspace -scheme parent -sdk iphonesimulator9.2 -destination name="iPhone 6" test
archive_project:
stage: archive
script:
- xctool -workspace XXX.xcworkspace -scheme parent -configuration AppStoreDistribution archive -archivePath build/parent
- xcodebuild -exportArchive -archivePath build/parent.xcarchive -exportOptionsPlist exportOptions.plist -exportPath build/parent
- fir p $PWD/build/parent/parent.ipa -T 8a7cf204f8c40f39a6ba41db8b44929d
only:
- master
在项目根目录下配置
.gitlab-ci.yml
文件
- 上面的配置文件中定义了两个
stages
。
- 用于描述两个阶段,一般有
build,test,archive,deploy
等。 -
stage
可以在所有job中使用,上面的build_project
和archive_project
就是job,每个job 分别对应执行哪个stage
。 - script 中就是你要执行的脚本。
- 如果你的项目中没有使用
xcworkspace
,就把相应的-workspace XXX.xcworkspace
改为-xcodeproject XXX.xcodeproject
。 - 配置文件中用到了xctool 工具,和xcodebuild 相似,具体安装及使用 xctool
-
archive
过程将项目export
出 ipa 文件 并上传至 fir 平台。fir 工具可以上传 ipa 文价,具体使用 fir 使用 -
exportOptions.plist
是放在根目录下的配置打包参数的,可以参考xcodebuild --help
-
only - master
是指只有提交master 分支才有执行build_project job
。
fir 安装
gem install fir-cli
上传至fir
fir p path/to/xxx.ipa -T #API TOKEN#
apitoken.png
如果一切成功的话,就会有如下 passed 标志 。
result.png小结,在测试,打包过程中可能会出现许多奇怪的错误,可以自己google或者询问我。
Fastlane
上述是使用xctool 打包并上传fir ,测试人员可以去fir 的网站扫码下载。这里介绍另一种方式。这里安装什么的我就不赘述了,官方都有,就将个人是怎么使用的。
整个过程还是遇到很多问题的,整个过程不断google,个人从ruby环境2.0 切换到2.3 ,最后在2.2.3 上才ok。
Fastlane 简化了测试,打包,上传testFlight 功能,其实包含了上述 xctool 的所有功能。Fastlane 每个过程都用一个lane 标示。
自动测试:
lane :test do
scan({
workspace:"ParentAndSchool.xcworkspace",
scheme:"parent",
device:"iPhone 6s",
clean: true
})
end
看一下scan 中的参数,workspace
表示项目的命名空间,如果你用cocoapods
集成是有这个文件的,如果没有使用xcworkspace
,这里参数就改为project
,对应的就是 xxx.xcodeproj
文件。
打包
lane :archive do
increment_build_number(
xcodeproj: "./jyb_ios_parent/parent/frameworks/runtime-src/proj.ios_mac/parent.xcodeproj"
)
gym(
workspace: "ParentAndSchool.xcworkspace",
scheme: "parent",
output_directory:"build",
output_name: "jyb.ipa"
)
end
archive
这个lane
我做了两个action
,分别是increment_build_number
和 gym
。
-
increment_build_number
这个动作是增加build
号,我们知道,上传appstore
时build
号要增加,这个需要xcode
中一些配置,可以看这里,如果你没配置好,fastlane 跑脚本的时候不会直接挂掉,只会有提示, 到时候上传时就会失败。 -
gym
这个action
用来打包,参数就不用多说了。
上传testFlight
lane :testFlight do
#for firwall
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
pilot(
ipa:"build/jyb.ipa",
username: "*******@corp-ci.com",
skip_waiting_for_build_processing: true
)
end
pilot
是可以将包自动发布到itunes testFlight
后台的,一开始怎么也传不上去,好像是网络之类的问题,后来才发现需要加上下面这句话。(官方文档还是要好好读的)
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
具体某个action 的参数及使用,可以通过命令 fastlane action ***
,例如(fastlane action gym)
查看。
另外在搭配 gitlab-ci
的过程中,发现每次archive
出来的包,到上传的时候总是说ipa文件找不到。因为gitlab
每个job
之后都会还原仓库的状态,就是archive
这个job
结束后,由于ipa 文佳不属于git仓库,被删了。解决办法如下,修改.gitlab-ci.yml
:
archive_parent_project:
stage : archive
script :
- fastlane match appstore
- fastlane archive
only:
- master
cache:
paths :
- build/
- build/jyb.ipa
key: "build"
untracked: true
upload_testFlight:
cache:
paths :
- build/
- build/jyb.ipa
key: "build"
untracked: true
stage : testFlight
script :
- fastlane testFlight
only:
- master
添加缓存文件,指定每个job
结束后不删除build
布目录下的文件。
fastlane match appstore
是用match 给app 配置证书,具体使用请看 Match
网友评论