无法通过Jenkinsfile运行"fastlane"命令

3

我编写了一个Gradle任务,通过命令行执行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从机终端上以及通过Android Studio作为Gradle任务和通过./gradlew uploadToPlayStore命令在终端上成功运行。在最开始,通过Android Studio的终端运行不正常,直到我通过使Android Studio的缓存失效并重启后才解决了问题。它一直报错:

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多分支流水线时,我遇到了之前在Android Studio中遇到的相同错误。从目前为止我所发现的情况来看,似乎Jenkins无法找到fastlane命令。我尝试为构建项目的节点设置环境变量,但仍然遇到相同的错误。
这是我在Jenkinsfile中运行Fastlane任务的stage
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):经过大约一天的调试,我发现当我通过Jenkins节点Script Console运行gem env命令时,我得到了不同的RUBYGEMS版本、gem路径和shell路径。我正在尝试让Jenkins节点使用安装在机器上的Ruby Gems而不是它自己的(或类似的东西)。

更新(3):经过大约3天的调试,我终于成功找出了问题所在。问题在于,在运行Jenkins流水线作业时,您无法通过标准Web界面和插件(如EnvInject)设置环境变量。此外,Mac OS有一个内置的ruby环境,默认情况下由Jenkins节点使用,但我无法在其中安装Fastlane Gem。

2个回答

2
解决方案如下:
  1. 在您的Jenkins从机上安装RVMRBEnv
  2. 安装Fastlane
  3. 将正确的环境变量添加到您的Jenkinsfile
“最初的回答”翻译成中文为“原始答案”。

请问,“适当的环境变量”具体是什么? - Roman Minenok
@RomanMinenok,如果您点击Jenkinsfile链接,您可以在“// Fastlane Environment Variables”注释下的“environment”部分中查看环境变量。 - Schadenfreude

0

通常需要手动设置PATH,因为Jenkins从机不会自动获取完整路径。

可以通过Jenkins仪表板上的从机配置页面(管理Jenkins -> 管理节点 -> -> 配置)完成。

您可以在从机上运行which fastlane来查找fastlane的安装位置。


更新:我尝试了类似的操作,即运行“/.rvm/rubies/ruby-2.4.2/bin/fastlane”,“supply”等,然后它给了我另一个错误:“进程'command '/.rvm/rubies/ruby-2.4.2/bin/fastlane''以非零退出值127结束”。 - Schadenfreude
我对RVM的内部工作原理不是很了解,但听起来它似乎没有正确初始化。https://dev59.com/ol8d5IYBdhLWcg3w8WFt#26370576 - chedabob
我找到了一个类似的解决方案(使用“包装器”而不是“bin”),但是在“包装器”目录中似乎没有fastlane文件。 - Schadenfreude
我重新生成了“wrappers”,为名为“fastlane”的Jenkins节点设置了环境路径,该路径指向“wrappers”中的文件,但我仍然遇到了“Caused by: java.io.IOException: Cannot run program "fastlane"”错误。 - Schadenfreude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接