Github-Action-Day5:在容器中构建(Building in Containers)

这是我的 Github Action Advent Calendar 的第五天的内容,如果您想要了解更多已经发布的 tips 信息,查看此处的 索引

昨天我讨论了 如何在 Github Action 虚拟机环境安装工具 以及依赖。但是,如果你想要对环境有更多的控制怎么办?或者说如果您根本不想运行在 Ubuntu 上怎么办?而这恰好是容器发光发热的地方。

通过创建一个包含你所有必需的开发工具和项目依赖关系的容器,您无需担心在工作流 (workflow) 开始运行时管理它们的配置以及安装步骤。

此外,您还可以获得基于容器的开发的优势:你可以在本地以及 CI 工具中使用相同的容器构建,这样您对您在 Github Action 中的构建和您在本地的构建看到的结果相匹配保持高度的自信。

这个构建方式 (使用容器) 的语法非常简单粗暴— 我无需运行任何 docker pull 或者 docker run 命令。Github Action 会帮我贴心的解决这些问题。只需要获取我的源代码,并在 node:current 运行我的测试。

Translate Note:

代码有一些细微改动

当我运行这个工作流 (workflow)时,Github Action 会自动下载我指定的位于 DockerHub 的容器镜像,然后启动这个镜像,并执行我在这个容器中指定的 run 步骤 (steps)。

注意,当你使用容器运行应用时,你依然需要声明 runs-on 参数指定虚拟系统环境。这是因为不管是 Linux 还是 Widows 都支持容器系统 — 所以如果你想要运行基于 Linux 的容器,你需要声明为 runs-on: ubuntu-latest,如果你想要运行基于 WIndows 的容器,则需要确保声明:runs-on: windows-latest

容器也可以帮助您扩展您的构建矩阵:如果您想要在多个不同的 Linux 发行版上构建以及测试您的工具,您甚至可以在矩阵中设置容器 jobs 。(因为 matrix workflow 实际上只是变量替换)

Translate Note:

也就是使用矩阵变量配置 container 参数的内容,参考 跨平台构建-Cross-Plaform-Builds

例如,在 Debian、Ubuntu以及 Centos 的旧版本和前沿版本上运行构建:

所以,你可以灵活地决定你的工作流 (workflows) 在哪里运行,是在我们提供的一个虚拟机系统环境中直接构建,还是在一个您自己指定的容器中,都可以。