我在Mac mini上安装了shell
执行器的GitLab Runner,并使用以下命令将其作为服务运行:
$ gitlab-runner install
$ gitlab-runner start
使用fastlane构建我的iOS项目时,大约需要9.3分钟:
+------+------------------+-------------+
| fastlane summary |
+------+------------------+-------------+
| Step | Action | Time (in s) |
+------+------------------+-------------+
| 1 | default_platform | 0 |
| 2 | build_app | 562 |
+------+------------------+-------------+
但是当我停止服务并手动运行GitLab Runner时:
$ gitlab-runner stop
$ gitlab-runner run
只需要6.7分钟。
+------+------------------+-------------+
| fastlane summary |
+------+------------------+-------------+
| Step | Action | Time (in s) |
+------+------------------+-------------+
| 1 | default_platform | 0 |
| 2 | build_app | 412 |
+------+------------------+-------------+
如果我使用gitlab-runner exec
在本地构建应用,它的构建速度会更快(15-20s):
$ gitlab-runner exec shell deploy
+------+------------------+-------------+
| fastlane summary |
+------+------------------+-------------+
| Step | Action | Time (in s) |
+------+------------------+-------------+
| 1 | default_platform | 0 |
| 2 | build_app | 396 |
+------+------------------+-------------+
和完全不使用GitLab Runner进行构建(使用bundle exec fastlane build_app
)时,构建时间相同。
我在构建机器的相同条件下对此进行了多次测试。结果非常一致:
gitlab-runner exec
在本地运行作业:大约395秒因此,最大的区别是作为服务运行和手动运行。造成这种情况的真正原因是什么?我的GitLab实例是自托管的,并且不在Mac mini中托管。
.gitlab-ci.yml
的内容:
stages:
- deploy
before_script:
- export LC_CTYPE=C
- export LANG=en_US.UTF-8
- export LANGUAGE=en_US:en
- export LC_ALL=en_US.UTF-8
- export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=60
deploy:
stage: deploy
tags:
- macos
cache:
key:
files:
- Cartfile.resolved
paths:
- Carthage
script:
# install dependencies
- '[ -f "Gemfile.lock" ] && gem install bundler --no-document && bundle install'
- '[ -f "Cartfile.resolved" ] && carthage bootstrap --cache-builds --platform iOS'
# build
- '[ -f "fastlane/Fastfile" ] && bundle exec fastlane build_only'
environment:
name: $CI_COMMIT_BRANCH
when: on_success
only:
refs:
- develop
- staging
- master
和fastlane
通道仅使用xcodebuild
构建应用程序:
lane :build_only do
build_app(scheme: "App",
include_bitcode: false,
export_method: "ad-hoc",
xcargs: "-quiet")
end