Travis CI

你可以针对一个或多个 Ruby 版本测试你的网站构建。以下指南将向你展示如何使用 TravisGitHub 集成中设置一个免费的构建环境,用于拉取请求。

1. 启用 Travis 和 GitHub

为你的 GitHub 存储库启用 Travis 构建

  1. 转到你在 travis-ci.org 上的个人资料:https://travis-ci.org/profile/username
  2. 找到你感兴趣的要启用构建的存储库。
  3. 拨动存储库开关,使其变为蓝色。
  4. 可以单击齿轮图标来配置构建。进一步的配置通过你的 .travis.yml 文件进行。更多详细信息如下。

2. 测试脚本

最简单的测试脚本运行 jekyll build,并确保 Jekyll 不会构建网站失败。它不会检查生成的网站,但它确实确保正确构建了内容。

在测试 Jekyll 输出时,没有比 html-proofer 更好的工具了。此工具检查你的生成网站,以确保所有链接和图像都存在。使用方便的 htmlproofer 命令行可执行文件使用它,或编写利用该 gem 的 Ruby 脚本。

将你想要运行并成功的命令保存在一个文件中:./script/cibuild

HTML 校对可执行文件

#!/usr/bin/env bash
set -e # halt script on error

bundle exec jekyll build
bundle exec htmlproofer ./_site

可以通过命令行开关指定一些选项。查看 html-proofer 自述文件以了解有关这些开关的更多信息,或在本地运行 htmlproofer --help

例如,要避免测试外部网站,请使用此命令

bundle exec htmlproofer ./_site --disable-external

HTML Proofer 库

您还可以在 Ruby 脚本(例如,在 Rakefile 中)中调用 html-proofer

#!/usr/bin/env ruby

require 'html-proofer'
HTMLProofer.check_directory("./_site").run

选项作为第二个参数提供给 .new,并编码在符号键控的 Ruby Hash 中。有关配置选项的更多信息,请查看 html-proofer 的自述文件。

3. 配置您的 Travis 构建

此文件用于配置您的 Travis 构建。由于 Jekyll 是使用 Ruby 构建的,并且需要 RubyGems 来安装,因此我们使用 Ruby 语言构建环境。下面是一个示例 .travis.yml 文件,后面是对每行的解释。

注意:您还需要一个 Gemfile,Travis 将自动安装基于引用的 gem 的依赖项。这是一个示例 Gemfile,其中包含两个引用的 gem,“jekyll”和“html-proofer”

source "https://rubygems.org.cn"

gem "jekyll"
gem "html-proofer"

您的 .travis.yml 文件应如下所示

language: ruby
rvm:
  - 2.6.3

before_script:
 - chmod +x ./script/cibuild # or do this locally and commit

# Assume bundler is being used, therefore
# the `install` step will run `bundle install` by default.
script: ./script/cibuild

# branch whitelist, only for GitHub Pages
branches:
  only:
  - gh-pages     # test the gh-pages branch
  - /pages-(.*)/ # test every branch which starts with "pages-"

addons:
  apt:
    packages:
    - libcurl4-openssl-dev

cache: bundler # caching bundler gem packages will speed up build

# Optional: disable email notifications about the outcome of your builds
notifications:
  email: false

好的,现在对每行进行解释

language: ruby

此行告诉 Travis 使用 Ruby 构建容器。它使您的脚本可以访问 Bundler、RubyGems 和 Ruby 运行时。

rvm:
  - 2.6.3

RVM 是一个流行的 Ruby 版本管理器(如 rbenv、chruby 等)。此指令告诉 Travis 在运行测试脚本时要使用的 Ruby 版本。使用 预先安装在 Travis 构建 docker 映像上的版本以加快构建速度。

before_script:
 - chmod +x ./script/cibuild

构建脚本文件需要设置可执行属性,否则 Travis 将因权限被拒绝错误而失败。您还可以在本地运行此命令并直接提交权限,从而使此步骤变得无关紧要。

script: ./script/cibuild

Travis 允许您运行任何任意 shell 脚本来测试您的网站。一种约定是将项目的所有脚本放在 script 目录中,并将测试脚本称为 cibuild。此行完全可自定义。如果您的脚本不会发生太大变化,则可以直接在此处编写测试咒语

install: gem install jekyll html-proofer
script: jekyll build && htmlproofer ./_site

script 指令可以是任何有效的 shell 命令。

# branch whitelist, only for GitHub Pages
branches:
  only:
  - gh-pages     # test the gh-pages branch
  - /pages-(.*)/ # test every branch which starts with "pages-"

您希望确保仅在包含您网站的分支上运行网站的 Travis 构建。确保此隔离的一种方法是在 Travis 配置文件中包含分支白名单。通过指定 gh-pages 分支,您将确保仅在网站分支上执行关联的测试脚本(如上所述)。如果您使用拉取请求流程来提议更改,您可能希望为您的构建强制执行一项约定,以便包含编辑的所有分支都带有前缀,如上使用 /pages-(.*)/ 正则表达式所示。

branches 指令完全是可选的。如果您将其省略,Travis 将从对存储库的任何分支的每次推送构建。

务必从您的 _config.yml 中排除 vendor

Travis 在其构建服务器上捆绑 vendor 目录中的所有 gem,而 Jekyll 会错误地读取并炸毁这些 gem。

exclude: [vendor]

为了加快构建速度,您应该缓存 bundler 创建的 gem 包。Travis 为此工具预定义了 缓存策略,该策略应具有执行此操作所需的所有默认配置。

cache: bundler

或者,如果您对构建电子邮件通知不感兴趣,可以使用此配置禁用它们。Travis 支持广泛的通知服务,您可能会发现 另一个更有用(例如 Slack)

notifications:
  email: false

故障排除

Travis 错误: “您在更改 Gemfile 后尝试在部署模式下安装。在其他地方运行 bundle install 并将更新的 Gemfile.lock 添加到版本控制中。”

解决方法: 在本地运行 bundle install 并将您的更改提交到 Gemfile.lock,或从您的存储库中删除 Gemfile.lock 文件并在 .gitignore 文件中添加一个条目以避免再次签入。

问题?

本指南全部开源。如果您有修复,请继续 编辑,如果您遇到问题并需要帮助,请 寻求帮助