-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
134 lines (128 loc) · 5.98 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
# docker image
image: metabohub/mama-rest:1.2.0
# maven env.
variables:
GIT_SUBMODULE_STRATEGY: recursive
# database
MYSQL_HOSTNAME: "mysql-test-server"
MYSQL_ROOT_PASSWORD: "mama_password"
MYSQL_DATABASE: "mama_db"
MYSQL_USERNAME: "mama_user@'%'"
MYSQL_USERPASSW: "mama_password"
# docker env.
DOCKER_IMAGE: "metabohub/mama-rest:1.2.0"
DOCKER_CONTAINER: "mama-rest"
DOCKER_SOCKET: "6382"
# cache
IMAGE_FILE: "mama-rest.image"
CACHE_BASH: "/tmp/gitlab-ci-cache"
CACHE_DOCKER: "/root/.cache-ci"
# cache
cache:
paths:
- vendor/
# stages
stages:
- docker_env
- tests
- copy_to_dev
# main jobs: build docker image and test it
build docker image:
stage: docker_env
tags:
- shell
except:
refs:
- master
- tags
before_script:
- echo "==================================";
- echo "[info] set config. files ";
- test -f config/mama-config.ini && rm config/mama-config.ini
- cp config/mama-config.ini.sample config/mama-config.ini
- >
sed -i \
-e "s/https:\/\/mama-webapp.metabohub.fr/$CONFIG_URL_WEBAPP/g" \
-e "s/host = 127.0.0.1/host = unh-pfemlindev.ara.inrae.fr/" \
-e "s/host = \"smtp-nonaut.inra.fr\"/host = \"$CONFIG_SMTP_HOST\"/" \
-e "s/smtpauth = false/smtpauth = \"$CONFIG_SMTP_AUTH\"/" \
-e "s/username = \"\"/username = \"$CONFIG_SMTP_USERNAME\"/" \
-e "s/password = \"\"/password = \"$CONFIG_SMTP_PASSWORD\"/" \
-e "s/secure = \"\"/secure = \"$CONFIG_SMTP_SECURE\"/" \
-e "s/port = 25/port = $CONFIG_SMTP_PORT/" \
-e "s/from_email = \"no-reply-mama@metabohub.fr\"/from_email = \"$CONFIG_SMTP_EMAIL_FROM\"/" \
-e "s/email = \"Contacts-MAMA-MTH@inrae.fr\"/email = \"$CONFIG_EMAIL_CONTACT\"/" \
config/mama-config.ini
script:
- docker build -t $DOCKER_IMAGE .
after_script:
- echo "[gitlab-ci] reset/init cache";
- test -d $CACHE_BASH || mkdir -p $CACHE_BASH
- test -f $CACHE_BASH/$IMAGE_FILE && rm -rf $CACHE_BASH/$IMAGE_FILE
- echo "[gitlab-ci] create new docker image";
- docker save -o $CACHE_BASH/$IMAGE_FILE $DOCKER_IMAGE
tests:
stage: tests
tags:
- docker
services:
- name: mysql:5.7
alias: mysql-test-server
except:
refs:
- master
- tags
before_script:
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="DROP DATABASE IF EXISTS $MYSQL_DATABASE; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="CREATE DATABASE $MYSQL_DATABASE CHARACTER SET utf8; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="DROP USER IF EXISTS $MYSQL_USERNAME; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="CREATE USER $MYSQL_USERNAME IDENTIFIED BY '$MYSQL_USERPASSW'; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="REVOKE ALL, GRANT OPTION FROM $MYSQL_USERNAME; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO $MYSQL_USERNAME; "
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=$MYSQL_HOSTNAME --execute="FLUSH PRIVILEGES; "
- pushd /var/www/html/tests
- cp ./mama-test.ini.docker ./mama-test.ini
- sed -i -e "s/password = \"xxxx\"/password = \"$CONFIG_SMTP_PASSWORD\"/" ./mama-test.ini
- ../vendor/bin/doctrine orm:schema-tool:create
- popd
script:
- pushd /var/www/html/tests
- ../vendor/bin/phpunit --coverage-text --colors=never --coverage-html $CACHE_DOCKER/coverage-report --bootstrap ../vendor/autoload.php .
- popd
coverage: '/^\s*Lines:\s*(\d+\.?\d+\%)/' #
copy to dev:
stage: copy_to_dev
tags:
- docker
except:
refs:
- master
- tags
before_script:
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
script:
- echo "[gitlab-ci] remove old code report on test server";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "rm -rf /var/www/html/code_report_mama/rest "
- echo "[gitlab-ci] copy code report to test server";
- scp -r $CACHE_DOCKER/coverage-report $SSH_USER@$SSH_HOST_PFEMLINDEV:/var/www/html/code_report_mama/rest
- echo "[gitlab-ci] remove old docker image";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "rm -rf /tmp/$IMAGE_FILE "
- echo "[gitlab-ci] stop and remove docker container";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "docker stop $DOCKER_CONTAINER || echo \"container not started\" ";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "docker rm $DOCKER_CONTAINER || echo \"container not init\" ";
- echo "[gitlab-ci] copy new docker image to test server ";
- scp -r $CACHE_DOCKER/$IMAGE_FILE $SSH_USER@$SSH_HOST_PFEMLINDEV:/tmp/
- echo "[gitlab-ci] load new docker image ";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "cat /tmp/$IMAGE_FILE | docker load";
- echo "[gitlab-ci] start new docker container as deamon";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "docker run --restart unless-stopped --name $DOCKER_CONTAINER -it -p $DOCKER_SOCKET:80 -d $DOCKER_IMAGE ";
- echo "[gitlab-ci] update database schema";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "docker exec -i $DOCKER_CONTAINER \"bash\" \"-c\" \"cd /var/www/html/ && php vendor/bin/doctrine orm:schema-tool:update --force\" "
- echo "[gitlab-ci] remove docker image on test server";
- ssh $SSH_OPTS $SSH_USER@$SSH_HOST_PFEMLINDEV "rm -rf /tmp/$IMAGE_FILE ";
after_script:
- echo "[gitlab-ci] remove docker image on gitlab server";
- test -f $CACHE_DOCKER/$IMAGE_FILE && rm -rf $CACHE_DOCKER/$IMAGE_FILE