Я написал 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.