3.1. 构建管道

../_images/build.svg

源文件是 Markdown 文件。它们要么是纯粹的 Markdown 文件,要么是保存为 Markdown 格式并移除了输出的 Juypyter notebook。对于后者,我们可以使用 Jupyter 配合 notedown 插件直接编辑它们,然后在提交前运行“内核 -> 重启并清除输出”。

然后,我们的构建管道会运行以下步骤来发布最终产物。

  1. 将 .md 文件转换为 .ipynb 文件并逐个执行。我们使用 .md 文件作为源文件格式的原因是它便于审查源代码的变更。我们每次都进行评估,以保证每个 notebook 都是可执行的。这个评估步骤可能很耗时,我们可以

  • 假设每个 notebook 可以在 10 分钟内执行完毕,我们可以使用多个 GPU 来加速执行。

  • 如果源 .md 文件自上次评估以来没有发生变化,我们可以重用缓存的 .ipynb 文件以避免再次执行。

  • 我们使用多个进程来并行运行 notebook。

  1. 带有输出的 .ipynb 文件可以直接上传到 Github,这样用户可以克隆下来在本地或云端运行。我们也会将所有文件打包成 zip 格式,方便用户轻松下载。

  2. 这些 .ipynb 文件随后被转换为与 Sphinx 兼容的 .rst 文件格式。额外的预处理步骤用于处理图片/表格/引用的引用。

  3. 使用 Sphinx 构建 .html 和 .pdf 文件。

  4. 将所有 .html/.pdf/.zip 文件发布到线上,例如发布到一个 AWS S3 存储桶中。

3.1.1. 多种实现

../_images/multi-lang.svg