gpt4 book ai didi

android - 在 Docker 中为 Android 运行并行的 Gitlab CI 作业

转载 作者:行者123 更新时间:2023-12-04 03:46:51 25 4
gpt4 key购买 nike

我使用 Gitlab CI 在 Docker 容器内使用 faSTLane 构建我的 Android 应用程序。我的应用程序有两种“风格”,我想在单独的 CI 作业中构建它们。这是 .gitlab-ci.yml 的相关部分:

default:
image: registry.example.com/group/project:29-android-fastlane-debian
tags:
- docker
before_script:
- ruby -v # Print out ruby version for debugging
- bundle install

build_flavor1_debug:
stage: build
script:
- bundle exec fastlane build release:"false" --env flavor1
artifacts:
paths:
- app/build/outputs/bundle/
rules:
- if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
when: never
- when: on_success

build_flavor2_debug:
stage: build
script:
- bundle exec fastlane build release:"false" --env flavor2
artifacts:
paths:
- app/build/outputs/bundle/
rules:
- if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
when: never
- when: on_success

(此管道中的其他工作会发布 git 标签的构建并上传到 Play 商店,但这些与此问题无关。)

以下是Fastfile的相关部分:

# All flavors we know about. If one is not specified, run them all
flavors = {
"flavor1" => "com.example.flavor1.app",
"flavor2" => "com.example.flavor2.app"
}

# If set to a single flavor, make it the only one in the array
if ENV["FLAVOR_NAME"]
flavors = flavors.slice(ENV["FLAVOR_NAME"])
end

UI.user_error!("Unknown flavor '#{ENV["FLAVOR_NAME"]}' selected") if flavors.empty?

platform :android do

desc "Build the application"
lane :build do |options|
setup(options)

flavors.each { |flavor_name, flavor_package|
build_flavor(
flavor: flavor_name,
release: options[:release]
)
}
end

end

使用 --env 标志加载 .env 文件,并设置适当的 FLAVOR_NAME 变量,一次只运行一种风格.

当我按顺序运行构建时,这工作正常,但花费的时间太长了。我更改了 Gitlab Runner 配置以允许最多同时运行 8 个作业,现在我收到以下错误:

The message received from the daemon indicates that the daemon has disappeared.
Build request sent: Build{id=111291aa-90bc-45c3-8fb4-9a271d4663f4, currentDir=/builds/group/project}
Attempting to read last messages from the daemon log...
Daemon pid: 1100
log file: /root/.gradle/daemon/6.5/daemon-1100.out.log
----- Last 20 lines from daemon log file - daemon-1100.out.log -----

[SNIP] - No useful logs here...

----- End of the daemon log -----
FAILURE: Build failed with an exception.
* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)

有时这会发生在一种口味的工作上,有时会发生在另一种口味上。如果我手动重新运行失败的作业,它总是会成功。

我相信正在发生的事情是两个构建作业在同一个 Docker 容器中运行,而不是每个都有自己的容器。无论哪一个完成使用 Gradle,都会先关闭 Gradle 守护进程,这会导致另一个失败。

如何让这些作业能够并行运行?

最佳答案

您是否有足够的资源来同时运行?尤其是内存可能是个问题,因此操作系统会因内存压力而杀死另一个容器。

关于android - 在 Docker 中为 Android 运行并行的 Gitlab CI 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65016092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com