android - 无法通过 Jenkinsfile 运行“fastlane”命令
问题描述
我写了一个通过命令行Gradle task
执行命令的。fastlane supply
任务如下所示:
task uploadToPlayStore(type: Exec) {
group = "upload"
commandLine "fastlane", "supply",
"--aab", "$project.rootDir/app/build/outputs/bundle/upload/${archiveFile}.aab",
"--mapping", "$project.rootDir/app/build/outputs/mapping/upload/mapping.txt",
"--skip_upload_apk", "true",
"--skip_upload_metadata", "true",
"--skip_upload_images", "true",
"--skip_upload_screenshots", "true",
"--track", "internal",
"--package_name", "$appPackage",
"--json_key", "~/Documents/key.json"
}
此任务从我正在运行它的 Jenkins slave 上的终端成功运行,并通过 Android Studio 作为 aGradle task
并通过其终端通过./gradlew uploadToPlayStore
. 起初它无法通过 Android Studio 的终端正常运行,直到我对 Android Studio 进行了 Invalidate Cache and Restart。它给出了这个错误:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:uploadToPlayStore'.
...............
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'fastlane''
...............
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'fastlane'
...............
Caused by: java.io.IOException: Cannot run program "fastlane" (in directory "/Users/..."): error=2, No such file or directory
...............
Caused by: java.io.IOException: error=2, No such file or directory
目前,当我尝试运行我的 Jenkins Multibranch Pipeline 时,我遇到了之前在 Android Studio 中遇到的相同错误。从我目前发现的情况来看,詹金斯似乎fastlane
由于某种原因找不到该命令。我尝试Environment Variable
为我正在构建项目的构建节点设置一个,但我仍然遇到同样的错误。
这是我运行任务stage
的地方:Jenkinsfile
Fastlane
stage('Upload To Google Play Store') {
steps {
script {
if (env.BRANCH_NAME.startsWith("release")) {
sh './gradlew uploadToPlayStore --stacktrace'
} else {
echo 'Skipping stage since we\'re not on a release branch...'
}
}
}
}
更新(1):当"~/.rvm/rubies/ruby-2.4.2/bin/fastlane", "supply", ...
以--debug
活动标志运行命令时,我得到以下堆栈跟踪:
22:54:51.135 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
22:54:51.137 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command '/Users/bild_nachine/.rvm/rubies/ruby-2.4.2/bin/fastlane'.
22:54:51.147 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
22:54:51.147 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command '/Users/bild_nachine/.rvm/rubies/ruby-2.4.2/bin/fastlane''
22:54:51.148 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
22:54:51.150 [ERROR] [system.err] env: ruby_executable_hooks: No such file or directory
22:54:51.152 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
22:54:51.152 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command '/Users/bild_nachine/.rvm/rubies/ruby-2.4.2/bin/fastlane'' finished with exit value 127 (state: FAILED)
更新(2):经过大约一天的调试后,我发现当我gem env
通过 运行命令时Script Console
,Jenkins node
我得到了不同的 RUBYGEMS 版本、gem 路径和 shell 路径。我目前正在尝试Jenkins node
使用机器上安装的 Ruby Gems,而不是它自己的(或那些行中的东西)。
更新(3):经过大约 3 天的调试,我终于弄清楚到底出了什么问题。问题是,在运行 Jenkins 管道作业时,您无法真正通过标准 Web 界面和插件(如EnvInject)设置环境变量。Mac OS 也有一个内置的 ruby 环境,默认情况下由 Jenkins 节点使用,我无法在其上安装 Fastlane Gem。
解决方案
解决方案如下:
- 在 Jenkins 从站上安装RVM或RBEnv
- 安装快车道
- 将适当的环境变量添加到您的Jenkinsfile
推荐阅读
- google-analytics - Google Analytics(分析)中缺少“移动资产”按钮
- r - R convert numeric to percentage the 'tidyverse way" using percent_format
- wso2 - WSO2AM - 如何在属性中获取 API 版本?
- python - How to build a udp connection with python server and universal robot simulation software as a client?
- scala - F绑定多态对象的集合
- r - R、ncdf 和 clim.pact 兼容 Windows
- amazon-web-services - 两个 EC2 实例之间的 SSH 和 SCP 超时
- spring - Substituting a model property with "type":"string" and "format":"time" in Springfox
- excel - VBScript for Excel "objWorkbook.RefreshAll" doesn't refresh data
- .net-core - 使用 git log 使 MSBuild Exec 命令跨平台工作