Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';“t运行”;“快车道”;通过Jenkinsfile命令_Android_Jenkins_Gradle_Jenkins Pipeline_Fastlane - Fatal编程技术网

Android Can';“t运行”;“快车道”;通过Jenkinsfile命令

Android Can';“t运行”;“快车道”;通过Jenkinsfile命令,android,jenkins,gradle,jenkins-pipeline,fastlane,Android,Jenkins,Gradle,Jenkins Pipeline,Fastlane,我编写了一个Gradle任务,通过命令行执行fastlane supply命令。任务如下所示: task uploadToPlayStore(type: Exec) { group = "upload" commandLine "fastlane", "supply", "--aab", "$project.rootDir/app/build/outputs/bundle/upload/${archiveFile}.aab", "-

我编写了一个
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 slave上的终端成功运行,并通过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 Multibranch管道时,我遇到了与之前在Android Studio中遇到的相同的错误。从我目前发现的情况来看,Jenkins似乎出于某种原因找不到
fastlane
命令。我尝试为我正在构建项目的构建节点设置一个
环境变量
,但仍然得到相同的错误

这是
jenkins文件
中的
阶段
,我在这里运行我的
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”和“…
标记处于活动状态的情况下运行命令时,我会得到以下堆栈跟踪:

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节点的
脚本控制台运行
gem env
命令时,我得到了不同的RUBYGEMS版本,gem路径和shell路径。我目前正试图让Jenkins节点使用安装在机器上的Ruby Gems,而不是它自己的(或那些行中的东西)


更新(3):经过大约3天的调试,我终于找到了问题所在。问题是,当运行Jenkins管道作业时,您无法通过标准web界面和插件(如)真正设置环境变量。此外,Mac OS还有一个内置的ruby环境,Jenkins节点默认使用该环境,我无法在其上安装Fastlane Gem

您通常需要手动设置路径,因为Jenkins从机无法获取完整路径

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


通过在从属设备上运行
哪个fastlane
,您可以找到fastlane的安装位置。

解决方案如下:

  • 在Jenkins slave上安装或
  • 安装
  • 将适当的环境变量添加到

  • 更新:我尝试了类似的操作,即运行“~/.rvm/rubies/ruby-2.4.2/bin/fastlane”、“supply”等,然后它给了我另一个错误:
    Process'command'~/.rvm/rubies/ruby-2.4.2/bin/fastlane'',结束时退出值为非零127
    我对rvm的内部工作原理不太了解,但是听起来它没有正确初始化我找到了一个类似的解决方案(使用
    wrappers
    而不是
    bin
    ),但是
    wrappers
    目录中似乎没有
    fastlane
    文件。我重新生成了
    wrappers
    ,为Jenkins节点设置一个名为
    fastlane
    的环境路径,该路径指向
    wrappers
    中的文件,我再次得到由以下原因引起的
    :java.io.IOException:无法运行程序“fastlane”
    我可以问“适当的环境变量”到底是什么?@romaminenok,如果单击Jenkins文件链接,您可以在
    //fastlaine Environment Variables
    注释下的
    Environment
    部分中查看环境变量。