很难低估容器在DevOps实践中的重要性。通常,你会将容器部署到生产环境中──因此很自然地开始使用容器进行本地开发,并管理依赖项。我们研究了如何利用它在容器内部进行构建。但是,我们也可以使用容器服务,将正在运行的容器用作构建和测试工作流程的一部分。

你通常需要运行一些与其他服务(通常是数据库)进行通信的集成测试。你可以通过编写 docker run 命令来拉下容器,启动容器并映射必要的端口,从而编写脚本,但这在最佳情况下很烦人。而且,如果你要在容器中进行构建,则自己运行docker会变得非常棘手。

使用容器服务可以使GitHub Actions基础架构为你执行。你只需指定容器和要映射的任何端口,它将在作业开始时启动服务容器,并使该容器可用于作业中的步骤。

services:
redis:
image: 'redis:latest'
ports:
- 6379/tcp

这将启动 redis:latest 容器并将容器中的端口6379映射到虚拟机运行程序上的端口。这等同于运行 docker run redis:latest -p 6379/tcp,就像你要运行该命令一样,映射到本地运行程序上的端口不是确定性的。GitHub Actions可在job.services上下文中提供此信息。

你可以查看 $ 以标识本地端口号。(就像运行 docker run 一样,你还可以指定容器端口和本地端口,例如 6379:6379,将容器端口6379映射到本地端口6379。)

将其放入工作流中,如果我有一个 与Redis对话的 Node 脚本,并连接到 REDIS_HOST 环境变量所指定的Redis主机的 `REDIS_PORT 端口,那么我可以创建一个工作流,该工作流启动Redis容器并运行Node脚本。

你可以使用服务容器来启动服务,例如 Redis, PostgreSQL 或MySQL甚至是Selenium。服务容器的执行使工作流中的这些容器的执行和交互变得更加容易。

原文链接:https://www.edwardthomson.com/blog/github_actions_20_container_services.html

GitHub repo: qiwihui/blog

Follow me: @qiwihui

Site: QIWIHUI