设置 GitLab 与 Laravel、PostgreSQL 和 PHPUnit 的持续集成
我最近为一个基于 Laravel 和 PostgreSQL 的项目搭建了一个基于 GitLab 的持续集成流程。花了一段时间才弄好,所以我在这里分享我的最终配置。 基本结构 主要的 GitLab CI 配置由项目根目录中的一个文件保存,该文件应名为.gitlab-ci.yml。从该文件可以调用其他 shell 脚本,但我试图将所有内容都放在一个地方。 然而,我们将管理名为.env.gitlab-c
我最近为一个基于 Laravel 和 PostgreSQL 的项目搭建了一个基于 GitLab 的持续集成流程。花了一段时间才弄好,所以我在这里分享我的最终配置。
基本结构
主要的 GitLab CI 配置由项目根目录中的一个文件保存,该文件应名为.gitlab-ci.yml
。从该文件可以调用其他 shell 脚本,但我试图将所有内容都放在一个地方。
然而,我们将管理名为.env.gitlab-ci
的第二个文件,该文件将保存特定于 GitLab CI 的所有 ENV 变量配置选项。
最后但同样重要的是,您将需要一个 PHPUnit xml 配置文件。
一步一步看.gitlab-ci.yml
我们将在配置文件中逐行进行,但您可以在文章末尾看到最终结果。
image: php:7.0
进入全屏模式 退出全屏模式
在这里,我们选择已配置 php 的可用 docker 映像之一。您可以在此处找到完整列表:从https://hub.docker.com/r/\_/php/
services:
- postgres:latest
进入全屏模式 退出全屏模式
来自 GitLab 的官方文档src:
services
关键字定义了另一个在您的作业期间运行的 docker 映像,并链接到image
关键字定义的 docker 映像。这允许您在构建期间访问服务映像。
非常重要要注意的是,如果您将postgres
作为服务添加到您的应用程序,PostgresSQL 的服务容器将可以在主机名postgres
下访问。因此,为了访问您的数据库服务,您必须连接到主机命名为postgres
而不是套接字或localhost
。这在稍后配置.env.gitlab-ci
文件时很重要。
variables:
POSTGRES_DB: mydb-test
POSTGRES_USER: runner
POSTGRES_PASSWORD: ""
进入全屏模式 退出全屏模式
在这里,您可以使用所有您想要的值,只要它们与.env.gitlab-ci
和您的phpunit.xml
的值匹配即可。
before_script:
进入全屏模式 退出全屏模式
再次来自官方文档src
before_script
用于定义应在所有作业(包括部署作业)之前但在工件恢复之后运行的命令。这可以是一个数组或多行字符串。
让我们一一探索所有这些命令。
- >
set -xe
&& apt-get update -yqq
&& apt-get install -yqq
git
libicu-dev
libpq-dev
libzip-dev
zlib1g-dev
进入全屏模式 退出全屏模式
只需安装一些依赖项
-
git
需要稍后安装composer
-
libicu-dev
将是国际化 php 扩展所必需的 (intl
) -
libpq-dev
是postgres的头文件 -
libzip-dev
和zlib1g-dev
是 zip 操作所必需的,并且需要激活相应的 php 扩展。没有它们,我们的composer install
命令将引发大量警告并尝试下载每个包两次 ** 将整个过程减慢 2 分钟或更长时间**
- >
docker-php-ext-install
pdo_pgsql
pgsql
sockets
intl
zip
进入全屏模式 退出全屏模式
docker-php-ext-install
是一个方便的脚本,用于安装官方 php docker 镜像提供的 php 扩展。我将自己限制在项目运行所需的最小扩展范围内。你可能需要更多。
- curl -sS https://getcomposer.org/installer | php
- php composer.phar self-update
- php composer.phar install --no-progress --no-interaction
进入全屏模式 退出全屏模式
安装composer
并使用它来安装我们所有的项目依赖项。
- cp .env.gitlab-ci .env
进入全屏模式 退出全屏模式
设置正确的 ENV 变量。我们稍后会研究这个文件。
- php artisan key:generate
- php artisan help config:clear
- php artisan route:clear
- php artisan migrate:refresh
进入全屏模式 退出全屏模式
设置应用程序密钥,清除几个缓存以防万一,然后运行迁移。
test:app:
script:
- vendor/bin/phpunit --configuration phpunit-gitlabci.xml
进入全屏模式 退出全屏模式
最后使用我们的phpunit-gitlabci.xml
配置文件运行我们的 PHPUnit 测试套件。
小破
那是最复杂的文件,剩下的就是小菜一碟,但你应该休息一下:P
简要介绍.env.gitlab-ci
该文件本身是非常不言自明的,您可以在文章末尾看到最终版本。但我想强调一下数据库配置。
DB_CONNECTION=pgsql
DB_PORT=5432
DB_HOST=postgres
DB_DATABASE=mydb-test
DB_USERNAME=runner
DB_PASSWORD=
进入全屏模式 退出全屏模式
请注意DB_HOST
、DB_DATABASE
和DB_USERNAME
的值如何与.gitlab-ci.yml
配置文件中variables
键内部的值相同。
关于phpunit-gitlabci.xml
的简要说明
此文件可能是可选的,具体取决于您的本地配置。如果你的普通phpunit.xml
文件没有定义任何DB_DATABASE
环境变量,你就不需要这个。但是如果它恰好定义了一个,并且与你为 GitLab 的 CI 选择的值不同,你必须记住正确设置它:
<env name="DB_DATABASE" value="mydb-test"/>
进入全屏模式 退出全屏模式
总结
一旦配置正确,GitLab 的持续集成系统可能是一件好事,但如果您偏离通常的路径并且您听到的只是 docker 映像配置链接 并且您以前从未使用过它,它可能会有点混乱。希望你会发现这个小指南很有用
.gitlab-ci.yml
image: php:7.0
services:
- postgres:latest
variables:
POSTGRES_DB: mydb-test
POSTGRES_USER: runner
POSTGRES_PASSWORD: ""
before_script:
- >
set -xe
&& apt-get update -yqq
&& apt-get install -yqq
git
libicu-dev
libpq-dev
libzip-dev
zlib1g-dev
- >
docker-php-ext-install
pdo_pgsql
pgsql
sockets
intl
zip
- curl -sS https://getcomposer.org/installer | php
- php composer.phar self-update
- php composer.phar install --no-progress --no-interaction
- cp .env.gitlab-ci .env
- php artisan key:generate
- php artisan help config:clear
- php artisan route:clear
- php artisan migrate:refresh
test:app:
script:
- vendor/bin/phpunit --configuration phpunit-gitlabci.xml
进入全屏模式 退出全屏模式
.env.gitlab-ci
APP_ENV=testing
APP_KEY=key
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost:8000
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=mydb-test
DB_USERNAME=runner
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=sync
MAIL_DRIVER=log
进入全屏模式 退出全屏模式
本帖原发于ariera.github.io
更多推荐
所有评论(0)