-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
141 lines (124 loc) · 4.14 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
stages:
- codeStyle
- prepareRuntime
- build
- dockerPack
- test
- deploy
variables:
RUNTIME_CONTAINER: "runtime"
BUILD_CONTAINER: "build"
ARTIFACT_CONTAINER: "artifact"
codeStyle:
stage: codeStyle
# this is only https://github.com/nette/code-checker in docker
image: "${CI_REGISTRY}/trejjam/code-checker:master"
script:
- php /var/www/code-checker.php -d Application/app --short-arrays -i config
- php /var/www/code-checker.php -d Application/www
tags:
- docker
- image
except:
- tags
prepareRuntime:
stage: prepareRuntime
script:
- docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}"
- docker build --pull -t "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}" .
- docker push "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}" "${CI_PROJECT_PATH}:${RUNTIME_CONTAINER}"
- docker rmi "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}"
- docker build -t "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}" --file "DockerfileBuild" .
- docker push "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}" "${CI_PROJECT_PATH}:${BUILD_CONTAINER}"
- docker rmi "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}"
- docker logout "${CI_REGISTRY}"
tags:
- docker
- image
except:
- tags
build:
stage: build
image: "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}"
script:
- Scripts/linkCache.sh
- Scripts/addAccessKeys.sh
- cd Application/www && yarn run composer-install && cd ../...
- cd Application/www && yarn run linux-deploy && cd ../..
- Scripts/copyFiles.sh
tags:
- docker
- image
- may-upload
except:
- tags
only:
- master
- production
artifacts:
name: application
paths:
- Application/
expire_in: '30 days'
pack:
stage: dockerPack
variables:
GIT_STRATEGY: none
script:
- docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}"
- mv Application/* ./
- docker pull "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}" "${CI_PROJECT_PATH}:${RUNTIME_CONTAINER}"
- docker pull "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}" "${CI_PROJECT_PATH}:${BUILD_CONTAINER}"
- docker build -t "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" .
- docker push "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" "${CI_PROJECT_PATH}:${ARTIFACT_CONTAINER}"
- docker rmi "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" "${CI_REGISTRY_IMAGE}:${BUILD_CONTAINER}" "${CI_REGISTRY_IMAGE}:${RUNTIME_CONTAINER}"
- docker rmi "${CI_PROJECT_PATH}:${BUILD_CONTAINER}" "${CI_PROJECT_PATH}:${RUNTIME_CONTAINER}"
- docker logout "${CI_REGISTRY}"
tags:
- docker
- image
- may-upload
only:
- master
- production
except:
- tags
artifacts:
name: nginxConfig
paths:
- nginx/
expire_in: '30 days'
deploy:
stage: deploy
when: manual
variables:
GIT_STRATEGY: none
dependencies:
- pack
script:
- docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}"
- docker pull "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" "${CI_PROJECT_PATH}:${ARTIFACT_CONTAINER}"
- docker tag "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" "${CI_PROJECT_PATH}:active"
- docker rmi "${CI_REGISTRY_IMAGE}:${ARTIFACT_CONTAINER}" "${CI_PROJECT_PATH}:${ARTIFACT_CONTAINER}"
# dc-<project> is alias for docker-compose with per environment config
- dc-project stop php
- dc-project up -d php
# project_nginx_config is volume with nginx conf files
- docker run --rm -v "${CI_PROJECT_DIR}/nginx:/nginx/artifact" -v "project_nginx_config:/nginx/service" busybox:latest sh -c "rm -rf /nginx/service/* && mv /nginx/artifact/master/* /nginx/service/"
- dc-project exec -T nginx nginx -s reload
- docker logout "${CI_REGISTRY}"
tags:
- docker
- deploy
- staging
environment: staging
only:
- master
except:
- tags