fengzifz.com

水则资车,旱则资舟

0%

利用 gitlab 实现多服务器的持续集成和部署

之前写过一篇关于利用 gitlab 实现持续集成和部署的文章,见:在 gitlab.com 上配置持续集成和持续部署

然而,当我们的业务的测试环境和生产环境是分离的,并且生产环境也可以支持 CI/CD 时,我们也可以配置让其实现自动化,而不用每次手动去更新。

1. 在 gitlab.com 配置多个 gitlab-runner

实质上,就是配置多个 gitlab-runner,登录 gitlab.com 或者是你自己的自建 gitlab 服务器,然后打开项目的 settings > CI/CD > Runners,由于 gitlab 支持配置多个 gitlab-runner,所以我们只需要复制 registration token,到对应的服务器注册 gitlab-runner,然后指定不同的 tag 就可以了。

gitlab-ci

2. 在 .gitlab-ci.yml 添加对应的 CI/CD 策略

以一个常规的 laravel 项目为例,假设配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
stages:
- test
- deploy

# Variables
variables:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_DATABASE: homestead
DB_HOST: mysql

# Speed up builds
cache:
key: $CI_BUILD_REF_NAME # changed to $CI_COMMIT_REF_NAME in Gitlab 9.x
paths:
- vendor
- node_modules
- public
- .yarn

test:
stage: test
services:
- mysql:5.7
image: edbizarro/gitlab-ci-pipeline-php:7.2-alpine
script:
- sudo yarn config set cache-folder .yarn
- yarn install --pure-lockfile
- cp .env.example .env
- composer install --prefer-dist --no-ansi --no-interaction --no-progress
- php artisan key:generate
- php artisan migrate:refresh --seed
- php artisan storage:link
- php artisan route:cache
- php artisan config:cache
artifacts:
paths:
- ./storage/logs # for debugging
expire_in: 1 days
when: always
only:
- develop
- master_client
- master

deploy_production:
stage: deploy
environment:
name: production
url: http://testing.fengzifz.com
only:
- master
tags:
- testing_site

然后我们再这个配置文件最后添加如下内容:

1
2
3
4
5
6
7
8
9
deploy_client:
stage: deploy
environment:
name: client_production
url: http://www.client_site.com
only:
- master_client #这个是分支名称
tags:
- client_live_tag #这个tag要对应第 1 个步骤创建的 runner 对应的 tag

然后当我们把更新的代码合并到 master_client 分支时,就会触发新添加的 runner,去执行持续集成和部署。

完。