在 CircleCI 上自动部署 Jekyll

使用 CircleCI 构建、测试和部署 Jekyll 网站

使用 CircleCI(持续集成与持续交付工具)可以快速完成 Jekyll 网站的构建、测试和部署。CircleCI 支持 GitHubBitbucket,你可以通过开源仓库或私有仓库免费开始使用。

1. 在 CircleCI 上关注你的项目

要开始使用 CircleCI 构建你的项目,只需在 CircleCI 网站上“关注(follow)”你的项目:

  1. 访问“Add Projects”页面。
  2. 在左侧的 GitHub 或 Bitbucket 标签页中,选择一个用户或组织。
  3. 在列表中找到你的项目,然后点击右侧的“Build project”。
  4. 首次构建会自动开始。你可以在仓库根目录创建一个 .circleci/config.yml 文件,告诉 CircleCI 如何构建你的项目。

2. 依赖管理

对于 Jekyll 项目(无论是否使用 CircleCI),管理依赖最简单的方式是使用 Gemfile

你通常需要在 Gemfile 中包含 Jekyll、本项目使用的 Jekyll 插件、HTML Proofer 以及其他所需的 gem。同时不要忘记将 Gemfile.lock 一并纳入版本控制。

下面是一个示例 Gemfile

source 'https://rubygems.org'

ruby '2.7.4'

gem "jekyll"
gem "html-proofer"
    - step:
       run: bundle install

3. 测试

最基础的测试就是确认 jekyll build 是否能够成功运行。这是后续所有测试的前提条件,因为其他测试都依赖于已生成的网站内容。

因此,我们会在依赖安装完成后,通过 Bundler 运行 Jekyll:

    - step:
        run: bundle exec jekyll build

HTML Proofer

网站构建完成后,通常还需要进行测试,以检查 HTML 是否有效、链接是否失效等。

虽然有不少相关工具可用,但 HTML Proofer 是 Jekyll 用户中较为流行的选择。我们会在测试阶段使用一些常用参数来运行它。

有关所有可用参数,请查看 html-prooferREADME,或者在本地运行 htmlproofer --help 查看帮助。

    - step:
        run: bundle exec htmlproofer ./_site --check-html --disable-external

完整的 .circleci/config.yml 示例文件

下面的 .circleci/config.yml 示例演示了如何将你的 Jekyll 项目部署到 AWS。

要使其正常工作,你首先需要配置 S3_BUCKET_NAME 环境变量

workflows:
  test-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master
version: 2.1
jobs:
  build:
    docker:
      - image: cimg/ruby:2.7.4
    environment:
      BUNDLE_PATH: ~/repo/vendor/bundle
    steps:
      - checkout
      - restore_cache:
          keys:
            - rubygems-v1-{{ checksum "Gemfile.lock" }}
            - rubygems-v1-fallback
      - run:
          name: Bundle Install
          command: bundle check || bundle install
      - save_cache:
          key: rubygems-v1-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle
      - run:
          name: Jekyll build
          command: bundle exec jekyll build
      - run:
          name: HTMLProofer tests
          command: |
            bundle exec htmlproofer ./_site \
              --allow-hash-href \
              --check-favicon  \
              --check-html \
              --disable-external
      - persist_to_workspace:
          root: ./
          paths:
            - _site
  deploy:
    docker:
      - image: cimg/python:3.9.1
    environment:
      S3_BUCKET_NAME: <<YOUR BUCKET NAME HERE>>
    steps:
      - attach_workspace:
          at: ./
      - run:
          name: Install AWS CLI
          command: pip install awscli --upgrade --user
      - run:
          name: Upload to s3
          command: ~/.local/bin/aws s3 sync ./_site s3://$S3_BUCKET_NAME/ --delete --acl public-read

有疑问?

本指南完全开源。如果你发现需要修正的地方,欢迎直接编辑本文

如果在使用过程中遇到问题并需要帮助,可以前往社区支持页面寻求帮助。

此外,CircleCI 也提供了一个在线社区,你可以在那里获取相关支持。