codegyre/robo-ci

Travis CI 命令行运行器

0.1.0 2014-09-27 00:08 UTC

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 构建。
  • 在容器内调试构建

要求

需要安装 DockerRobo 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 执行。

  • installbefore_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