托管与本地:gitlab-ci.yml将"静态"目录复制到"公共"。如何告诉本地命令"bundle exec jekyll serve"也这样做



我没有网站建设经验。我已经按照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的"根"文件夹中,有index.html、目录(css、static(等。你可以在gitlab-ci.yml文件中看到,gitlab将静态目录的内容复制到根文件夹(public(中。尽管在查看我的项目页面时只有静态的文件(而不是副本(。

在linux上,我安装并运行了jekyll,但它显示不正确。";未找到";命令行中的错误静态目录中的所有引用路径(该目录有css、font真棒、字体、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-jkyll"这一行,但我仍然保留了它,它目前有效。尽管我想知道是否应该将其更改为"捆绑安装",以便gitlab/本地jekyll版本相同。bundle命令读取Gem文件,我的文件指定了jekyll版本。我不确定这是否会告诉gitlab使用特定版本的jekyll,或者他们只是使用他们的版本。

然后,在linux上,我用从gitlab下载的.yml文件本地cd到站点目录中。然后运行

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文件夹,否则它可能已经在复制这些文件夹了。不看源文件很难知道。

如果没有重写sourceconfig命令行参数以避免出现"配置文件:无"消息,请从与_config.yml相同的文件夹中运行jekyll

相关内容

  • 没有找到相关文章

最新更新