Как исправить проблему "s3_website" при продвижении сайта Jekyll на CloudFront через gitlab CI / CD?

Я создал Pipeline в GitLabs и использую docker как gitlab-runner. Я хочу продвинуть сайт Jekyll на сайт s3. И для этого я использую гем s3_website. В моем конвейере определены 4 этапа. Где я создаю Jekyll, создаю артефакты с помощью Gulp, выполняю тест на своем сайте jekyll и затем развертываю.

Все шаги работают нормально, но при развертывании я получаю следующую ошибку. И я не мог понять, как решить эту проблему.

[fail] Could not load the site: Failed to parse ERB in /builds/myproject/s3_website.yml:
       (SyntaxError) /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_warn.rb:15: syntax error, unexpected tLABEL
           module_function define_method(:warn) {|*messages, uplevel: nil|

Когда я не использую Docker, он отлично работает на моем локальном компьютере. Но когда я пытаюсь сделать то же самое с помощью docker. Это дает мне ошибку выше.

Я пробовал это с Ruby 2.3, 2.4, 2.5, 2.6 на моем докере. Однако не повезло.

bundle exec s3_website push

Я ожидаю, что это развернет сайт в сегменте S3 и соответствующем облачном интерфейсе.

Любая подсказка будет оценена по достоинству.

🤔 А знаете ли вы, что...
Ruby обладает сильной системой типов, но при этом переменные не требуют объявления типов.


8
567
2

Ответы:

Решено

Мы столкнулись с той же ошибкой на CircleCI. Если я правильно понимаю, гем s3_website является оболочкой для Java .jar, использующего JRuby 1.7, и что-то должно быть изменено в одном из образов Docker или драгоценных камнях Ruby, из-за чего он начинает наследовать системный путь Ruby 2+. В результате его JRuby 1.7 пытается загрузить драгоценные камни Ruby, которые работают только в Ruby 2.0 и выше, поэтому он сталкивается с ошибками.

В качестве обходного пути вместо того, чтобы позволить гему s3_website вызывать сам файл .jar, я говорю гему s3_website загружать только файл .jar, а затем вызываю его вручную:

bundle exec s3_website install
java -cp $(bundle show s3_website)/*.jar s3.website.Push

Я сообщил об этом на странице проекта s3_website на GitHub.


То же сообщение об ошибке, но другое решение.

Корень моей проблемы был в том, что S3_ACCESS_KEY_ID не был настроен должным образом. Я исходил из моего файла .env

source .env

И это загрузило переменную ключа доступа, и развертывание сработало.