Create a GitLab Pages website from scratch
- Prerequisites
- Install Jekyll
- Specify the
public
directory for artifacts - Specify a stage to deploy
- Build faster with cached dependencies
Create a GitLab Pages website from scratch
本教程向您展示如何从头开始创建 Pages 站点. 您将从一个空白项目开始,并创建自己的 CI 文件,该文件向提供指导. 当您的 CI / CD 管道运行时,将创建 Pages 站点.
本示例使用静态站点生成器(SSG). 其他 SSG 遵循类似的步骤. 您无需熟悉 Jekyll 或 SSG 即可完成本教程.
要继续执行本示例,请从 GitLab 中的空白项目开始. 在根(顶级)目录中创建三个文件.
.gitlab-ci.yml
一个 YAML 文件,其中包含要运行的命令. 现在,将文件内容保留为空白.index.html
您可以使用所需的 HTML 内容填充 HTML 文件,例如:Gemfile
一个描述 Ruby 程序依赖性的文件. 用以下内容填充它:source "https://rubygems.org"
gem "jekyll"
Choose a Docker image
In this example, the Runner uses a Docker image to run scripts and deploy the site.
这个特定的 Ruby 映像在上维护 .
编辑您的.gitlab-ci.yml
并将此文本添加为第一行.
image: ruby:2.7
如果您的 SSG 需要构建 ,则必须指定一个包含 NodeJS 的映像作为其文件系统的一部分. 例如,对于Hexo网站,可以使用image: node:12.17.0
.
Install Jekyll
要在本地运行Jekyll ,您需要打开终端并执行以下操作:
- 通过运行
gem install bundler
安装 . - 通过运行
bundle install
创建Gemfile.lock
. - 通过运行
bundle exec jekyll build
安装 Jekyll.
在.gitlab-ci.yml
文件中,其写为:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
job:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
对于 GitLab Pages,此job
有一个特定的名称,称为pages
. 此设置告诉 Runner 您希望工作通过 GitLab Pages 部署您的网站:
Jekyll 需要知道在何处生成其输出. GitLab Pages 仅考虑名为public
的目录中的文件.
Jekyll 使用目标( -d
)为构建的网站指定输出目录:
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
Specify the public
directory for artifacts
既然 Jekyll 已将文件输出到public
目录,则 Runner 需要知道从何处获取文件. 工件存储在public
目录中:
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
将其粘贴到.gitlab-ci.yml
文件中,因此现在看起来像这样:
image: ruby:2.7
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
现在保存并提交.gitlab-ci.yml
文件. 您可以转到CI / CD>管道来观看管道运行.
成功后,请转到“设置”>”页面”以查看您的网站现在可用的 URL.
如果您想执行更多高级任务,则可以使用更新.gitlab-ci.yml
文件. 您可以使用GitLab CI / CD Lint Tool来检查 CI 语法.
以下主题显示了可以添加到 CI / CD 文件中的其他选项的其他示例.
Deploy specific branches to a Pages site
您可能只想从特定分支部署到 Pages 站点.
首先,添加workflow
部分以强制管道仅在将更改推送到分支时才运行:
image: ruby:2.7
workflow:
- if: '$CI_COMMIT_BRANCH'
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
然后将管道配置为仅运行 master 分支的作业.
如果要测试脚本并在部署到生产环境之前检查构建的站点,则可以完全按按master
来运行测试.
要为您的作业指定一个阶段,请在您的 CI 文件中添加一个stage
行:
image: ruby:2.7
workflow:
rules:
- if: '$CI_COMMIT_BRANCH'
pages:
stage: deploy
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
现在,将另一个作业添加到 CI 文件,告诉它测试除 master
分支以外的每个分支上的每次推送:
image: ruby:2.7
workflow:
rules:
- if: '$CI_COMMIT_BRANCH'
pages:
stage: deploy
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
test:
stage: test
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: '$CI_COMMIT_BRANCH != "master"'
当test
作业在test
阶段运行时,Jekyll 在名为test
的目录中构建站点. 该工作影响除master
之外的所有分支.
将阶段应用于不同的作业时,同一阶段中的每个作业都是并行构建的. 如果您的 Web 应用程序在部署之前需要多个测试,则可以同时运行所有测试.
Remove duplicate commands
为了避免在每个作业中重复相同的脚本,可以将它们添加到before_script
部分.
在示例中, gem install bundler
和bundle install
对于作业, pages
和test
都在运行.
将这些命令移至部分:
image: ruby:2.7
rules:
- if: '$CI_COMMIT_BRANCH'
before_script:
- gem install bundler
- bundle install
pages:
stage: deploy
script:
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
test:
stage: test
script:
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: '$CI_COMMIT_BRANCH != "master"'
Build faster with cached dependencies
为了加快构建速度,您可以使用cache
参数为项目的依赖项缓存安装文件.
此示例在运行bundle install
时将 Jekyll 依赖项缓存在vendor
目录中:
image: ruby:2.7
workflow:
rules:
- if: '$CI_COMMIT_BRANCH'
cache:
paths:
- vendor/
before_script:
- gem install bundler
- bundle install --path vendor
pages:
stage: deploy
script:
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
test:
stage: test
script:
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: '$CI_COMMIT_BRANCH != "master"'
在这种情况下,您需要从 Jekyll 构建的文件夹列表中排除/vendor
目录. 否则,Jekyll 将尝试与站点一起构建目录内容.
在根目录中,创建一个名为_config.yml
的文件并添加以下内容:
有关更多信息,请参见以下博客文章.