在持续集成中运行 mdbook

虽然以下示例使用 Travis CI,但它们的原则也应该直接转移到其他持续集成提供者。

确保您的图书 build 和 test 通过

这是一个示例 Travis CI .travis.yml 配置,可确保 mdbook buildmdbook test 成功运行。 快速 CI 运转时间的关键是缓存 mdbook 安装,这样您就不会在每次 CI 运行时编译 mdbook

language: rust
sudo: false

cache:
  - cargo

rust:
  - stable

before_script:
  - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
  - (test -x $HOME/.cargo/bin/mdbook || cargo install --vers "^0.3" mdbook)
  - cargo install-update -a

script:
  - mdbook build && mdbook test # In case of custom book path: mdbook build path/to/mybook && mdbook test path/to/mybook

将您的书部署到 GitHub Pages

遵循这些说明将导致在您仓库的master分支上成功运行 CI 后,您的书将被发布到 GitHub pages。

首先,使用“public_repo”权限(或“repo”用于私有仓库)创建一个新的 GitHub “Personal Access Token”(个人访问令牌)。 转到仓库的 Travis CI 设置页面并添加名为 GITHUB_TOKEN 的环境变量,该变量标记为安全且未显示在日志中。

在您仓库的设置页面中,导航到 Options 并将 GitHub Pages 上的 Source 更改为 gh-pages

然后,将此代码段附加到您的 .travis.yml 并更新 book 目录的路径:

deploy:
  provider: pages
  skip-cleanup: true
  github-token: $GITHUB_TOKEN
  local-dir: book # In case of custom book path: path/to/mybook/book
  keep-history: false
  on:
    branch: main

仅此而已!

注意: Travis 有一个新的 dplv2 配置,目前处于测试阶段。 要使用这种新格式,请将 .travis.yml 文件更新为:

language: rust
os: linux
dist: xenial

cache:
  - cargo

rust:
  - stable

before_script:
  - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
  - (test -x $HOME/.cargo/bin/mdbook || cargo install --vers "^0.3" mdbook)
  - cargo install-update -a

script:
  - mdbook build && mdbook test # In case of custom book path: mdbook build path/to/mybook && mdbook test path/to/mybook
  
deploy:
  provider: pages
  strategy: git
  edge: true
  cleanup: false
  github-token: $GITHUB_TOKEN
  local-dir: book # In case of custom book path: path/to/mybook/book
  keep-history: false
  on:
    branch: main
  target_branch: gh-pages

手动部署到 GitHub Pages

如果您的 CI 不支持 GitHub Pages,或者您正在使用 Github Pages 等集成部署到其他地方:

注意: 您可能想要使用不同的 tmp 目录:

$> git worktree add /tmp/book gh-pages
$> mdbook build
$> rm -rf /tmp/book/* # this won't delete the .git directory
$> cp -rp book/* /tmp/book/
$> cd /tmp/book
$> git add -A
$> git commit 'new book message'
$> git push origin gh-pages
$> cd -

或者将其放入 Makefile 规则中:

.PHONY: deploy
deploy: book
 @echo "====> deploying to github"
 git worktree add /tmp/book gh-pages
 rm -rf /tmp/book/*
 cp -rp book/* /tmp/book/
 cd /tmp/book && \
  git add -A && \
  git commit -m "deployed on $(shell date) by ${USER}" && \
  git push origin gh-pages

部署你的书到 GitLab Pages

在仓库的项目根目录中,创建一个名为 .gitlab-ci.yml 的文件,其中包含以下内容:

stages:
    - deploy

pages:
  stage: deploy
  image: rust
  variables:
    CARGO_HOME: $CI_PROJECT_DIR/cargo
  before_script:
    - export PATH="$PATH:$CARGO_HOME/bin"
    - mdbook --version || cargo install mdbook
  script:
    - mdbook build -d public
  rules:
    - if: '$CI_COMMIT_REF_NAME == "master"'
  artifacts:
    paths:
      - public
  cache:
    paths:
      - $CARGO_HOME/bin

在您提交并推送这个新文件后,GitLab CI 将自动运行并且您的书将可用!