我最近为一个基于 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-devzlib1g-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_HOSTDB_DATABASEDB_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

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐