我是GitLab-CI和Docker的新手,我不得不让一个跑步者来运行我的phpunit构建。按照这里的说明操作:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md
然而,根据他们的说明,容器显然不包含我需要的工具。所以问题是,当注册一个多运行器来拥有一个支持phpunit,composer的运行器时,配置是什么,这样我就可以测试我的laravel构建。
发布于 2015-11-02 22:17:32
按照他们的说明将gitlab-ci-multi-runner
注册到docker executor。在您的.gitlab-ci.yml
中,给出一个适当的图像,其中包含满足您需求的最低要求。其他你可以在before_script
中通过命令行install
的东西。我为您发布了一个示例工作配置:
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上运行的应用程序。因此,您需要根据您的需求对其进行调整。
发布于 2016-09-03 18:45:41
与Arman P.所说的一致。在运行测试时,请确保您有一个docker镜像,其中包含构建/测试所需的所有工具。
您有两个选择:
这两种选择各有优缺点:
选项(1)给你完全的控制权,但你需要将它添加到一个私有注册表中,CI可以从这个注册表中拉出(Gitlab为你提供了私有注册表支持)。这里唯一的小缺点是你必须首先设置私有注册表(例如Gitlab的)。不是很难,只需要做一次。
但接下来要由你来维护镜像,等等。
选项(2)允许您运行所有工具,而不必维护私有注册表或docker容器。正如Arman P.提到的,您只需在作业之前运行安装脚本即可。这样做的缺点是您的作业和构建/测试需要更长的运行时间,因为您现在必须在每次运行之前等待安装。
一个简单的例子:使用option (2)
我们需要PHPUnit和composer。
因此,使用来自公共docker集线器的容器,该容器具有php:选择一个包含您想要测试的PHP版本的容器(例如5.6或7)。让我们假设5.6。
在运行测试之前,我们需要在该容器中安装composer和PHPUnit。您的配置项文件可能如下所示:
.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
这项操作的实际用途的快速总结
每个作业--这里我们只有“构建应用程序”和“测试应用程序”--都将通过官方的PHP5.6镜像运行。
我们定义了两个阶段,测试构建阶段( build )和测试阶段() --注意:这两个阶段是默认定义的,但为了清楚起见,我们在这里是明确的。
运行的第一个作业将是“构建应用程序”,因为它发生在第一个阶段,构建。在此作业中运行脚本之前,会运行全局before_script,这将安装git和composer (Composer需要Git)。然后脚本运行并安装我们所有的composer依赖项。好了。
然后执行下一个阶段,即测试。因此,我们的作业附加到该运行(如果我们有多个),这对我们来说只是“测试应用程序”。在这里,我们使用YML特性重用install composer指令:本地before_script覆盖全局before_script,安装Composer (通过YML模板)和PHPUnit。然后实际的脚本运行:它运行我们的单元测试。单元测试假设您的根目录中有一个phpunit配置--您可以像在自己的终端上一样定制此命令。
请注意,由于阶段设置,构建阶段的输出将自动在测试阶段中可用。所以我们不需要做任何事情,Gitlab会为我们传递所有的文件!
使用install_composer模板的主要原因是为了缩短作业执行时间。大多数事情都需要Composer。因此,我们有一个全局模板和一个为每个作业运行的脚本。如果您需要更具体的工具,例如PHPUnit,那么在本地覆盖作业中的before_script并安装所需的工具。通过这种方式,我们不必安装一大堆工具,而这些工具可能并不是每个作业都需要的!
https://stackoverflow.com/questions/30188405
复制相似问题