托管 VS 本地:gitlab-ci.yml 将 'static' 目录复制到 'public'。如何告诉本地命令 "bundle exec jekyll serve" 也这样做

HOSTED VS LOCAL: gitlab-ci.yml copies 'static' directory to 'public'. How to tell local command "bundle exec jekyll serve" to do that as well

我没有建站经验。我已经关注 instructions on gitlab to fork an example jekyll site (including removing the fork relationship and renaming the url to groupname). On gitlab, the .gitlab-ci.yml 文件包含:

pages:
stage: deploy
script:
- gem install jekyll
- jekyll build -d public/
- cp -r static/* public/
artifacts:
  paths:
  - public
only:
- pages

在gitlab的'root'文件夹中,有index.html、目录(css、static)等,在gitlab-ci.yml文件中可以看到,gitlab将static目录的内容复制到根文件夹中(public)。虽然在查看我的项目页面(而不是副本)时只有静态文件。

在 linux 上,我有 installed and run jekyll,但它显示不正确。命令行上的“未找到”错误是静态目录中的所有引用路径(其中包含 css、font-awesome、fonts、img 和 js 的子目录)。

我不愿意在本地弄乱 file/directory 位置,因为当我想将更改部署到 gitlab 时,这可能会导致问题。我如何在本地模拟(使用“bundle exec jekyll serve”命令)gitlab 正在做什么(将静态复制到根目录)?或者还有其他方法可以 handle/fix 这个吗?

编辑:当 运行 服务命令时,我也看到 'Configuration file: none' 消息。虽然有一个 _config.yml 文件,但我认为它可能需要一些配置。在 different gitlab/jekyll 主题上有一些配置说明。我将不得不进一步调查。

解决后编辑:

根据 Ross 的建议,我将 .gitlab-ci.yml 文件中的行从 'jekyll build -d public/' 更新为 'bundle exec jekyll build -d public'。对于这个文件,我看到其他人已经删除了 'gem install jekyll' 行,但我仍然保留它并且现在可以使用。虽然我想知道是否应该将其更改为 'bundle install' 以便 gitlab/local jekyll 版本相同。 bundle 命令读取 Gem 文件,我的文件指定了 jekyll 版本。我不确定这是否会告诉 gitlab 使用特定版本的 jekyll,或者他们是否只是使用他们的版本而不管。

然后在本地 linux 我将我从 gitlab 下载的 .yml 文件放入站点目录。 那么运行

mkdir public
bundle install
bundle exec jekyll build -d public/
cp -r static/* public/
cd public/
jekyll serve

服务页面不再损坏。它现在看起来与实际 gitlab.io 页面完全一样。

您必须 运行 使用与 GitLab 相同的命令才能获得相同的结果。听起来你正在 运行宁此:

bundle install
bundle exec jekyll serve

您已将 GitLab 设置为 运行 这个:

gem install jekyll
jekyll build -d public/
cp -r static/* public/

您可以在本地使用 -d 和 运行 设置与 cp 命令相同的目标以获得类似的结果,但每次构建 jekyll 时都必须这样做。

我建议您继续使用 bundle 命令,并设置 GitLab 来做同样的事情。目前,您将 运行 陷入版本控制问题,因为 GitLab 将在每次构建时安装最新的 Jekyll,并且忽略 Gemfile 中的任何插件。

Jekyll 默认复制静态资源,所以你可以只依赖它而不是将 static/* 复制到 public,你需要更新路径。它可能已经复制了这些,除非您已将其配置为使用 exclude 选项忽略 static 文件夹。不看源文件很难知道。

运行 jekyll 来自与 _config.yml 相同的文件夹,如果您没有覆盖 sourceconfig 命令行参数以避免 'Configuration file: none'留言。