codegyre / robo-ci
Travis CI 命令行运行器
Requires
- codegyre/robo-docker: *
- symfony/yaml: ~2.0
This package is auto-updated.
Last update: 2024-09-13 10:10:27 UTC
README
RoboCI 是用于持续集成服务器的虚拟化环境运行器。RoboCI 的目标是 在 Docker 容器中本地运行 Travis CI 构建,并创建自定义构建设置。
RoboCI 用于
- 使用 Docker 创建虚拟化环境。
- 在隔离容器中运行验收、功能、单元、集成测试。
- 在本地或 CI 服务器上运行 Travis CI 构建。
- 在容器内调试构建
要求
需要安装 Docker 和 Robo PHP Task Runner。
安装
使用 Composer
{
"require-dev": {
"codegyre/robo": "*",
"codegyre/robo-ci": "@dev"
}
}
在你的项目根目录中创建 RoboFile.php
(如果尚不存在),只需运行 robo
。
将 composer 自动加载器附加到 RoboFile,以包含 Codegyre\RoboCI
<?php require_once 'vendor/autoload.php'; class RoboFile extends \Robo\Tasks { use Codegyre\RoboCI\Command\CI; use Codegyre\RoboCI\Command\Travis\Prepare; // define public methods as commands }
现在当你运行 robo
时,你将在 ci
命名空间中看到新命令。
RoboCI 和 PHP 构建
准备环境
RoboCI 使用 .travis.yml
作为运行 Travis 构建的主要配置。默认情况下,它将使用从 Travis Cookbooks 创建的 davert/roboci-php
镜像。它提供了带有已安装 PHP 的默认 Travis 环境。
RoboCI 将将你的 .travis.yml
文件转换为它自己的格式(见下文),并将其存储在 .roboci
目录中。
robo ci:travis-prepare
RoboCI 会为 .travis.yml
配置中列出的每个 PHP 版本创建一个环境。如果你在你的 Travis CI 中配置了 php 5.5,你应该会看到创建的 .roboci/5.5
。Travis 指令将被解析并准备用 Docker 执行。
install
和before_install
部分将被存储到Dockerfile
中,该文件用于构建 Docker 容器。before_script
部分将被保存到start.sh
中,该文件将被包含在.bashrc
中,以便在容器运行时执行。script
部分将被保存到run.sh
中services
将被存储到env.yml
中。所有定义的服务将在主容器之前执行,之后停止。
与 Travis 用于创建虚拟化容器的 OpenVZ 不同,Docker 不提供真正的虚拟化。它允许在不同的命名空间中执行不同的进程。每个 Docker 容器都旨在运行一个进程。这不是技术限制,而是设计限制。因此,RoboCI 实现了自己的执行服务(如 mysql、postgresql、mongodb 等)的方式。它不是在构建容器内运行服务,而是为每个服务创建链接容器。这使得 RoboCI 的行为与预期的 TravisCI 不同。
请注意,每次你更新 .travis.yml
时,你都需要使用 robo ci:travis-prepare
命令重建环境。
优化
强烈建议将所有可以缓存的操作存储到 TravisCI 的 install
部分。这将允许 RoboCI 将它们包含到 Dockerfile 中,并使 Docker 将它们存储在中间容器中。
如果你正在安装包或在 before_script
中运行 composer install
,你可以将它们移动到 install
以加快容器的启动速度。
运行构建
要运行构建,您可以使用 ci:run
并将环境作为参数。如果您想为 php 5.5 运行构建,您应该运行
robo ci:run 5.5
在没有运行测试的情况下进入已构建的容器更有用。这将允许运行特定测试并对其进行调试。您可以使用ci:shell
来调用它。在PHP 5.5中,这将执行
robo ci:shell 5.5
清理旧构建
主容器和服务容器可能持续存在。为了清理它们,您可以运行
robo ci:cleanup
参考
RoboCI将构建配置存储在.roboci
目录中。
.roboci/
environment1/
Dockerfile <-- build configuration
start.sh <-- setup script, excuted on container start
run.sh <-- script executed on docker run
env.yml <-- lists required services
environment2/
environment3/
服务
RoboCI包括MySql、PostgreSql、MongoDb和RabbitMQ作为服务。每个服务将在其自己的容器中执行,并链接到主容器。服务容器由配方构建。配方包括将在主容器中执行的Dockerfile
和链接指令。主要链接需要在内置服务的暴露端口上运行socat
。请参阅示例。
自定义
创建自己的服务
服务是从配方创建的。如果您想将配方添加到RoboCI中,请发送Pull Request。如果您需要自己的服务,请创建一个.roboci/_recipe/servicename
目录,并在其中放置Dockerfile。在那里,您可以指定基础服务镜像和构建指令。您还可以通过创建link.sh
来添加链接指令。link.sh
的内容将在主容器中执行。
通过创建自己的服务,您可以重新定义默认服务。
将其他服务添加到.roboci/environment/env.yml
中。
非Travis构建
RoboCI可以扩展以执行自定义构建,而无需使用Travis配方和Travis配置。为了准备原始RoboCI环境,您应该运行
robo ci:bootstrap
- 您将需要准备自己的构建镜像并在
Dockerfile
中使用它。 - 自定义服务在
env.yml
中的services
部分定义。 - 放置在
start.sh
中的准备脚本 - 放置在
run.sh
中的运行脚本
以通常的方式执行自定义环境
robo ci:run environment
robo ci:shell environment
鸣谢
由Michael Bodnarchuk创建 @davert 许可证MIT