Не могу запустить команду "fastlane" через Jenkinsfile - PullRequest
0 голосов
/ 27 декабря 2018

Я написал 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, на котором я ее запускаю, и через Android Studio как Gradle task и через свой терминал ./gradlew uploadToPlayStore,Сначала он не работал должным образом через терминал Android Studio, пока я не выполнил Invalidate Cache и перезапустил 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.Из того, что я нашел до сих пор, кажется, что Дженкинс по какой-то причине не может найти команду fastlane.Я попытался установить Environment Variable для узла сборки, где я собираю свои проекты, но все равно получаю ту же ошибку.

Это stage в Jenkinsfile, где я запускаю Fastlane task:

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пути и пути оболочки.В настоящее время я пытаюсь заставить Jenkins node использовать Ruby Gems, установленные на машине, а не свои (или что-то в этих строках).

Обновление (3): После примерно3 дня отладки мне наконец удалось выяснить, что именно не так.Проблема в том, что при запуске конвейерного задания Jenkins вы не можете установить переменные среды через стандартный веб-интерфейс и плагины (например, EnvInject ).Также Mac OS имеет встроенную среду ruby, которая используется узлом Jenkins по умолчанию, на котором я не смог установить Fastlane Gem.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Решение было следующим:

  1. Установка RVM или RBEnv на подчиненном устройстве Jenkins
  2. Установка Fastlane
  3. Добавьте правильные переменные окружения в Jenkinsfile
0 голосов
/ 27 декабря 2018

Обычно вам нужно настроить PATH вручную, так как ведомое устройство Jenkins не выбирает полный путь.

Это можно сделать через панель управления Jenkins на странице конфигурации ведомого устройства (Управление Jenkins -> УправлениеУзлы -> -> Настроить).

Вы можете узнать, где установлена ​​fastlane, запустив which fastlane на ведомом устройстве.

...