我没有网站建设经验。我已经按照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
文件夹,否则它可能已经在复制这些文件夹了。不看源文件很难知道。
如果没有重写source
或config
命令行参数以避免出现"配置文件:无"消息,请从与_config.yml
相同的文件夹中运行jekyll
。