作为服务运行时,GitLab Runner运行速度变慢

时间:2020-07-15 14:11:30

标签: macos gitlab-ci gitlab-ci-runner

我在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)时,构建时间相同。

我在构建机器的相同条件下对此进行了多次测试。结果非常一致:

  • 将作业作为服务运行:约560秒
  • 手动运行作业:约415秒
  • 使用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

0 个答案:

没有答案