-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path.gitlab-ci.yml
90 lines (77 loc) · 2.67 KB
/
.gitlab-ci.yml
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
stages:
- build
- test
- deploy
image:
name: docker/compose:1.24.0
entrypoint: [""]
services:
- docker:18.09-dind
variables:
DOCKER_HOST: tcp://docker:2375
APP_IMAGE: $CI_REGISTRY_IMAGE
APP_DEV_IMAGE: ${CI_REGISTRY_IMAGE}/dev
APP_BASE_IMAGE: ${CI_REGISTRY_IMAGE}/base
HTTP_PROXY_IMAGE: ${CI_REGISTRY_IMAGE}/http-proxy
### BUILD
build:
stage: build
image: docker:18.09
before_script:
- docker info
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- apk add --no-cache parallel
script:
- "parallel docker pull ::: \
${APP_BASE_IMAGE}:${CI_COMMIT_REF_SLUG} \
${APP_DEV_IMAGE}:${CI_COMMIT_REF_SLUG} \
${APP_IMAGE}:${CI_COMMIT_REF_SLUG} \
${HTTP_PROXY_IMAGE}:${CI_COMMIT_REF_SLUG} \
|| true"
- docker build . -t $APP_BASE_IMAGE:$CI_COMMIT_REF_SLUG --target base
--cache-from $APP_BASE_IMAGE:$CI_COMMIT_REF_SLUG
- docker build . -t $APP_DEV_IMAGE:$CI_COMMIT_REF_SLUG --target dev
--cache-from $APP_BASE_IMAGE:$CI_COMMIT_REF_SLUG
--cache-from $APP_DEV_IMAGE:$CI_COMMIT_REF_SLUG
- docker build . -t $APP_IMAGE:$CI_COMMIT_REF_SLUG
--cache-from $APP_BASE_IMAGE:$CI_COMMIT_REF_SLUG
--cache-from $APP_DEV_IMAGE:$CI_COMMIT_REF_SLUG
--cache-from $APP_IMAGE:$CI_COMMIT_REF_SLUG
- docker build infra/nginx -t $HTTP_PROXY_IMAGE:$CI_COMMIT_REF_SLUG
- "parallel docker push ::: \
${APP_IMAGE}:${CI_COMMIT_REF_SLUG} \
${APP_DEV_IMAGE}:${CI_COMMIT_REF_SLUG} \
${APP_BASE_IMAGE}:${CI_COMMIT_REF_SLUG} \
${HTTP_PROXY_IMAGE}:${CI_COMMIT_REF_SLUG} \
"
### TEST
.template: &test
stage: test
before_script:
- cp infra/docker-compose.ci.override.yml docker-compose.override.yml
- cp .env.example .env
# we need to resort to yaml processing, because, well... yaml.
- apk add --no-cache curl
- curl -sSL https://github.com/mikefarah/yq/releases/download/2.2.1/yq_linux_amd64 -o /usr/local/bin/yq
&& chmod +x /usr/local/bin/yq
- yq d -i docker-compose.yml services.app.volumes
- docker info
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- docker-compose config
test:
<<: *test
script:
- docker-compose pull
- docker-compose up -d || (docker-compose ps && docker-compose logs app && exit 1)
- docker-compose exec -T app sh -c 'wait-for $DB_HOST:$DB_PORT -t 60 -- phpunit'
coding style:
<<: *test
script:
- docker-compose pull app
- docker-compose run --rm --no-deps -T app php-cs-fixer fix -v --dry-run
allow_failure: true
static analysis:
<<: *test
script:
- docker-compose pull app
- docker-compose run --rm --no-deps -T app phpstan analyse src test