通过 gitlab CI/CD 在 CloudFront 上推送 Jekyll 站点时如何解决 "s3_website" 问题?

How to fix "s3_website" issue while pushing Jekyll site on CloudFront through gitlab CI/CD?

我在 GitLabs 中创建了 Pipeline,我正在使用 docker 作为 gitlab-runner。我想在 s3 网站上推送 Jekyll 网站。为此,我使用 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|

当我不在 Docker 上时,它在我的本地机器上工作得很好。但是当我尝试使用 docker 做同样的事情时。它给我上面的错误。

我在 docker 机器上用 ruby 2.3、2.4、2.5、2.6 试过了。然而运气不好。

bundle exec s3_website push

我希望这会将站点部署到 S3 存储桶和相应的云端。

如有任何线索,我们将不胜感激。

我们 运行 在 CircleCI 上遇到了同样的错误。如果我理解正确的话,s3_website gem 包装了一个使用 JRuby 1.7 的 Java .jar,并且其中一个 Docker 图像中一定发生了一些变化或 Ruby gems 导致它开始继承系统的 Ruby 2+ 路径。结果,它的 JRuby 1.7 尝试加载仅在 Ruby 2.0 及更高版本中有效的 Ruby gems,因此它会出错。

作为解决方法,我告诉 s3_website gem 只下载 .jar 文件,而不是让 s3_website gem 调用 .jar 文件本身,然后我手动调用它:

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

reported this 在 s3_website 项目的 GitHub 页面上。

相同的错误消息,但不同的解决方案。

我的问题根源在于 S3_ACCESS_KEY_ID 设置不正确。我获取了我的 .env 文件

source .env

这加载了访问密钥变量并且部署成功。