1

我没有网站建设经验。我已经按照 gitlab 上的说明创建了一个示例 jekyll 站点(包括删除 fork 关系并将 url 重命名为 groupname)。在 gitlab 上,.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将静态目录的内容复制到根文件夹(public )。尽管在查看我的项目页面(而不是副本)时只有静态文件。

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

我不愿意在本地弄乱文件/目录位置,因为当我想将更改部署到 gitlab 时可能会导致问题。如何在本地模拟(使用“bundle exec jekyll serve”命令)gitlab 正在做什么(将静态复制到根目录)?还是有另一种方法来处理/解决这个问题?

编辑:运行 serve 命令时,我还看到“配置文件:无”消息。虽然有一个 _config.yml 文件,但我认为它可能需要一些配置。在不同的 gitlab/jekyll主题上,有一些配置说明。我将不得不进一步调查。

解决后编辑:

根据 Ross 的建议,我将 .gitlab-ci.yml 文件中的行从“jekyll build -d public/”更新为“bundle exec jekyll build -d public”。对于这个文件,我看到其他人已经删除了“gem install jekyll”这一行,但我仍然拥有它并且它现在可以工作。尽管我想知道是否应该将其更改为“捆绑安装”,以便 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 页面完全相同。

4

1 回答 1

0

您必须运行与 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你需要更新路径。除非您已将其配置为忽略带有该选项的static文件夹,否则它可能已经在复制这些内容。exclude不看源文件很难知道。

如果您没有覆盖或命令行参数,jekyll则从与 相同的文件夹运行以避免“配置文件:无”消息。_config.ymlsourceconfig

于 2020-12-15T23:55:51.710 回答