1

我是 GitLab-CI 和 Docker 的新手,我一直在找一个跑步者来运行我的 phpunit 构建。按照此处的说明操作: https ://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md

但是,按照他们的指示,容器显然不包含我需要的工具。所以问题是,注册多运行器以拥有支持 phpunit、composer 的运行器时的配置是什么,以便我可以测试我的 laravel 构建。

4

2 回答 2

2

按照他们的说明向gitlab-ci-multi-runnerdocker executor 注册。比在您.gitlab-ci.yml提供的适当图像中包含满足您要求的最低要求。您可以install通过命令行在before_script. 我正在为您发布一个示例工作配置:

image: tetraweb/php
services:
    - mysql
variables:
    MYSQL_DATABASE: effiocms_db
    MYSQL_USER: effio_user
    MYSQL_PASSWORD: testpassword
    WITH_XDEBUG: "1"
before_script:
    # enable necessary php extensions
    - docker-php-ext-enable zip && docker-php-ext-enable mbstring && docker-php-ext-enable gd && docker-php-ext-enable pdo_mysql
    # composer update
    - composer self-update && composer --version
    - composer global require --no-interaction --quiet "fxp/composer-asset-plugin:~1.1.0"
    - export PATH="$HOME/.composer/vendor/bin:$PATH"
    - composer install --dev --prefer-dist --no-interaction --quiet
    # codeception install
    - composer global require --no-interaction --quiet "codeception/codeception=2.0.*" "codeception/specify=*" "codeception/verify=*"
    # setup application
    - |
      php ./init --env=Development --overwrite=All
      cd tests/codeception/backend && codecept build
      cd ../common && codecept build
      cd ../console && codecept build
      cd ../frontend && codecept build
      cd ../../../
    - cd tests/codeception/bin && php yii migrate --interactive=0 && cd ../../..
codeception:
    stage: test
    script:
        - |
          php -S localhost:8080 > /dev/null 2>&1 &
          cd tests/codeception/frontend
          codecept run

显然这个配置是针对我在 Yii2 上运行的应用程序的。因此,您需要根据您的要求对其进行调整。

于 2015-11-02T14:17:32.183 回答
2

与Arman P.所说的一致。运行测试时,请确保您有一个 docker 映像,其中包含构建/测试所需的所有工具。

你有两个选择:

  1. 您可以使用所需的所有工具构建自己的映像,并随着项目的发展对其进行维护;或者,

  2. 您可以简单地从 docker hub 安装一个基本映像并在运行作业之前安装所有工具。

这两种选择各有利弊:

选项 (1) 为您提供完全控制权,但您需要将其添加到 CI 可以从中提取的私有注册表中(Gitlab 为您提供私有注册表支持)。这里唯一的小问题是您必须首先设置私有注册表(例如Gitlab)。难度不大,只需要做一次。

但是然后由您来维护图像等。

选项 (2) 允许您运行所有工具,而无需维护私有注册表或 docker 容器。正如 Arman P. 所提到的,您只需在工作之前运行安装脚本。这样做的缺点是您的作业和构建/测试需要更长的时间才能运行,因为您现在必须在每次运行之前等待安装发生。


一个简单的例子:使用选项(2)

我们需要 PHPUnit 和作曲家。

因此,请使用来自公共 docker hub 的具有 php 的容器:选择一个具有您要测试的 PHP 版本(例如 5.6 或 7)的容器。让我们假设5.6。

在该容器中,我们需要先安装 composer 和 PHPUnit,然后才能运行我们的测试。这就是您的 CI 文件的样子:

.gitlab-ci.yml

image: php:5.6.25-cli

stages:
    - build
    - test

.install_composer_template:&install_composer
    - apt-get install -y git
    - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

before_script:
    <<:*install_composer

build app:
    stage: build
    script:
        - composer install
        - composer dump-autoload -o

test app:
    stage: test
    before_script:
        <<:*install_composer
        - composer global require -q phpunit/phpunit
    script:
        - phpunit --colors=always

快速总结这实际上做了什么

每一项工作——这里我们只有“构建应用程序”和“测试应用程序”——都将通过官方 PHP 5.6 映像运行。

我们定义了两个阶段构建测试——注意:这些是默认定义的,但为了清楚起见,我们在这里明确说明。

运行的第一个作业将是“构建应用程序”,因为它发生在第一阶段build中。在这个作业中运行脚本之前,全局before_script运行,它安装了 git 和 composer(Composer 需要 Git)。然后脚本运行并安装我们所有的作曲家依赖项。完毕。

然后执行下一阶段,即test。因此,我们的作业附加到该运行(如果我们有多个作业,则并行运行),这对我们来说只是“测试应用程序”。在这里,我们使用 YML 特性来重用安装 composer 指令:本地before_script覆盖全局before_script,安装 Composer(通过 YML 模板)和 PHPUnit。然后实际的脚本运行:它运行我们的单元测试。单元测试假设您在根目录中有一个 phpunit 配置——您可以像在自己的终端上一样自定义此命令。

请注意,由于阶段设置,构建阶段的输出在测试阶段自动可用。所以我们什么都不用做,Gitlab 会为我们传递所有的文件!

使用install_composer模板的主要原因是为了提高作业执行时间。大多数事情都需要 Composer。所以我们有一个全局模板和一个为每个作业运行的脚本。如果您需要一些更具体的东西,使用该作业仅需要的工具,例如 PHPUnit,然后在作业中本地覆盖before_script并安装所需的工具。这样,我们就不必安装我们可能在每项工作中都不需要的全部工具!

于 2016-09-03T10:45:40.760 回答