通过gitlab CI / CD在CloudFront上推送Jekyll网站时,如何解决“ s3_website”问题?

Ter*_*rry 8 ruby rubygems docker gitlab-ci

我已经在GitLabs中创建了Pipeline,并且我将docker用作gitlab-runner。我想将Jekyll网站推到s3网站上。为此,我正在使用s3_website gem。我在管道中定义了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|
Run Code Online (Sandbox Code Playgroud)

当我不在Docker上时,它在我的本地计算机上运行良好。但是当我尝试使用docker做同样的事情时。这给了我以上错误。

我在docker机器上使用ruby 2.3、2.4、2.5、2.6进行了尝试。但是没有运气。

bundle exec s3_website push
Run Code Online (Sandbox Code Playgroud)

我希望这可以将站点部署在S3存储桶和相应的Cloudfront上。

任何线索将不胜感激。

Jos*_*ley 5

我们在CircleCI上遇到了同样的错误。如果我理解正确,则s3_website gem会包装使用JRuby 1.7的Java .jar,并且其中Docker映像或Ruby gem中的某些内容必须已更改,导致其开始继承系统的Ruby 2+路径。结果,其JRuby 1.7尝试加载仅在Ruby 2.0及更高版本中工作的Ruby gem,因此它会出错。

作为一种解决方法,我让s3_website gem只下载.jar文件,而不是让s3_website gem本身调用.jar文件:

bundle exec s3_website install
java -cp $(bundle show s3_website)/*.jar s3.website.Push
Run Code Online (Sandbox Code Playgroud)

我在s3_website项目的GitHub页面上报告了这一情况。