В настоящее время я работаю над строительным конвейером, который использует Jenkins и GitLab для запуска сборок для проекта. В принципе, сборка запускается, когда кто-то подталкивает к репозиторию. Кроме того, некоторые скрипты Ruby выполняются как часть процесса сборки. Эти скрипты выполняют некоторые проверки проектов и выполняют некоторые исправления, такие как синхронизация проекта Xcode с добавленными и удаленными файлами из исходного каталога - в этом случае они не совпадают.Как найти правильную версию Ruby
Я использую несколько инструментов для настройки конвейера. Сборка выполняется на машине, физически расположенной на ведомом устройства. Дженкинс развернут на машине AWS. По этой причине я использовал pritunl для подключения двух в виртуальной сети. Я могу использовать локальные IP-адреса для связи между машинами, и SSH отлично работает в обоих направлениях.
Когда я нажимаю на пульт, сборка начинается правильно на подчиненном устройстве, но она не может быть завершена. Однако, если я вручную получаю доступ через SSH через терминал, сборка выполняется нормально. Это выход я получаю от Jenkins:
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- xcodeproj (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/jenkins/workspace/Core/platform/ios/scripts/pbxsync.rb:58:in `<main>'
Как вы можете видеть, она не требует Xcodeproj, в результате чего сборка на провал. Тем не менее, это происходит только в том случае, если сборка запускается Jenkins, а не вручную.
Это заставляет меня думать, что Дженкинс использует какую-то другую установку Ruby или, по крайней мере, другую среду. В основном мне нужно установить драгоценные камни для той же среды Ruby, что и Jenkins, но я не знаю, какой именно. Есть идеи?
У Jenkins есть консоль, которая запускает скрипты Groovy на удаленном подчиненном устройстве. Я играл с ним немного, но не так много выводов. Может быть, это помогает.
Это может быть важно; это притон я использую для сценариев Ruby: #!/usr/bin/env ruby
На терминале, я использую тот же пользователь, как Дженкинс доступа к ведомой машине. Это называется «дженкинс».
Одна вещь, которую я забыл упомянуть о том, что выход говорит мне правильную версию: /Users/jenkins/.rvm/rubies/ruby-2.4.0
. По крайней мере, это путь, который указывает, что он пытается загрузить драгоценный камень. Так что я попытался следующие:
: /Users/jenkins/.rvm/rubies/ruby-2.4.0/bin/ruby
require 'xcodeproj'
Потом нажмите Ctrl + D и не получить никакого вывода - что установка рубина найти драгоценный камень правильно.
Не нужно и нежелательно использовать теги «Изменить» или «Обновить» в тексте. Вместо этого поместите информацию в текст, где бы она была, если бы вы добавили ее изначально. Мы можем видеть, где и когда вы изменили текст, если нам нужно. –
Вы не можете использовать '/ usr/bin/env ruby' и получать согласованные результаты по различным учетным записям и системам, если они не настроены одинаково, что маловероятно при использовании Jenkins. 'env' смотрит внутри PATH, чтобы найти Ruby и возвращает первый найденный Ruby. Если вы не устанавливаете свой PATH и не установили тот же Ruby, что и локальные коэффициенты, хорошо, Дженкинс находит Ruby, установленный ОС в/usr/bin/ruby. Вам нужно будет проверить, что Дженкинс использует против вашей локальной системы, когда вы создаете вручную. –
Ну, да, но как? Я понимаю, что мне нужно знать, какая установка Jenkins работает, я просто не знаю, как это сделать. Идеи? –