Проблема с gitlab dpl с версией ruby

У меня есть приложение узла, которое я развертываю через Gitlab. Я использую образ докера node:12.8.0.

Недавно произошла ошибка развертывания со следующей ошибкой

 $ dpl --provider=heroku --app=$HEROKU_DEVELOPMENT_APP --api-key=$HEROKU_API_KEY --skip-cleanup
 Installing deploy dependencies
 ERROR:  Error installing dpl-heroku:
     faraday requires Ruby version >= 2.4.
 Successfully installed multipart-post-2.1.1
 Successfully installed ruby2_keywords-0.0.2
 /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- dpl/provider/heroku (LoadError)
     from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/provider.rb:93:in `rescue in block in new'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/provider.rb:68:in `block in new'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/cli.rb:41:in `fold'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/provider.rb:67:in `new'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/cli.rb:31:in `run'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/lib/dpl/cli.rb:7:in `run'
     from /var/lib/gems/2.3.0/gems/dpl-1.10.15/bin/dpl:5:in `'
     from /usr/local/bin/dpl:22:in `load'
     from /usr/local/bin/dpl:22:in `'
 Running after_script
 00:01
 Running after script...
 $ echo "Job - $CI_JOB_NAME ended."
 Job - deploy_development ended.
 Cleaning up file based variables
 00:01
 ERROR: Job failed: exit code 1

Я не могу установить Ruby2.4 через apt-get install ruby2.4.

Любой совет будет принят во внимание. благодаря

2 ответа

Решение

Сегодня у меня была такая же проблема в Gitlab CI.

Проблема в том, что Node по умолчанию использует debian stretch (версия 9) в качестве основы для образов докеров, по крайней мере, в версиях 12.x LTS. Эта версия debian по умолчанию имеет в репозиториях Ruby 2.3.3, что не поддерживается Faraday, для которого требуется версия, равная или выше 2.4.

Я использовал тег 12.x-buster (обратите внимание на -busterв конце тега версии), и в этих образах docker Node использует debian buster (версия 10) в качестве основы. В этой версии debian по умолчанию есть репозитории Ruby 2.5.5, что позволяет установить Faraday, и поэтому dpl для heroku работает нормально.

Те, кто столкнулся с этой проблемой на travis-ci, я смог сделать это, добавив before_deployКоманда для указания используемой версии Faraday.

      ...
before_deploy:
  - rvm $(travis_internal_ruby) --fuzzy do ruby -S gem install faraday -v 1.8.0
deploy:
  provider: heroku
  api_key: $HEROKU_API_KEY
...

Подробнее: https://travis-ci.community/t/heroku-deploy-fails-installing-dpl-heroku-encounters-faraday-error/12563/6?u=hallmanitor

Другие вопросы по тегам