-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdeploiement.yml
111 lines (97 loc) · 4.29 KB
/
deploiement.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
---
- hosts: all
vars:
chemin_racine: "{{ ansible_env.HOME }}"
chemin_client: "{{ chemin_racine }}/client"
chemin_serveur: "{{ chemin_racine }}/serveur"
chemin_orchestrateur: "{{ chemin_racine }}/orchestrateur"
chemin_config: "{{ ansible_env.HOME }}/config"
version_orchestrateur: master
version_serveur: master
version_client: master
hote_client: app.eva.beta.gouv.fr
hote_serveur: api.app.eva.beta.gouv.fr
hote_metabase: metabase.eva.beta.gouv.fr
docker_compose_environnement:
CHEMIN_CLIENT: "{{ chemin_client }}"
CHEMIN_SERVEUR: "{{ chemin_serveur }}"
HOTE_CLIENT: "{{ hote_client }}"
HOTE_SERVEUR: "{{ hote_serveur }}"
HOTE_METABASE: "{{ hote_metabase }}"
RESEAU_TRAEFIK: "traefik"
COMPOSE_PROJECT_NAME: "{{ chemin_racine|replace('/', '-') }}"
tasks:
- name: Clone ou met à jour le dépot
git:
repo: "https://github.com/betagouv/{{ item.depot }}.git"
version: "{{ item.version }}"
dest: "{{ item.destination }}"
force: yes
loop:
- destination: "{{ chemin_orchestrateur }}"
depot: eva-orchestrateur
version: "{{ version_orchestrateur }}"
- destination: "{{ chemin_serveur }}"
depot: eva-serveur
version: "{{ version_serveur }}"
- destination: "{{ chemin_client }}"
depot: eva
version: "{{ version_client }}"
- name: Copie le fichier d'environnement de production vers l'orchestrateur
copy:
remote_src: yes
src: "{{ chemin_config }}/.env.serveur.prod"
dest: "{{ chemin_orchestrateur }}/.env.serveur.prod"
- name: Arrête métabase dans le but de gagner un peu de mémoire
command: docker-compose stop metabase
args:
chdir: "{{ chemin_orchestrateur }}"
environment: "{{ docker_compose_environnement }}"
- name: Construis les images docker
command: docker-compose build --pull
args:
chdir: "{{ chemin_orchestrateur }}"
environment: "{{ docker_compose_environnement }}"
- name: sauvegarde la base avant deploiement
command: docker-compose run --rm pgbackups /backup.sh
args:
chdir: "{{ chemin_orchestrateur }}"
environment: "{{ docker_compose_environnement }}"
- name: Lance les tâches de gestion de la base de données
command: docker-compose run --rm serveur bundle exec rails db:migrate
args:
chdir: "{{ chemin_orchestrateur }}"
environment: "{{ docker_compose_environnement }}"
- name: Démarre les images
command: docker-compose up -d
args:
chdir: "{{ chemin_orchestrateur }}"
environment: "{{ docker_compose_environnement }}"
- name: Ajoute un script pour pouvoir facilement lancer docker-compose
copy:
content: "CHEMIN_CLIENT={{ docker_compose_environnement.CHEMIN_CLIENT }} CHEMIN_SERVEUR={{ docker_compose_environnement.CHEMIN_SERVEUR }} RESEAU_TRAEFIK={{ docker_compose_environnement.RESEAU_TRAEFIK }} COMPOSE_PROJECT_NAME={{ docker_compose_environnement.COMPOSE_PROJECT_NAME }} docker-compose $@"
dest: "{{ chemin_orchestrateur }}/dc"
mode: 0755
- name: Lance les crons avec bash
cronvar:
name: SHELL
value: /usr/bin/bash
- name: Ajoute tout les chemins possible dans le PATH du cron
cronvar:
name: PATH
value: /usr/local/bin:/usr/bin
- name: Ajoute la tache de copie du backup dans un cron
cron:
name: "backup-{{ docker_compose_environnement.COMPOSE_PROJECT_NAME }}"
hour: "4"
minute: "0"
job: >-
cd {{chemin_orchestrateur}};
export env $(cat .env.serveur.prod | xargs);
CONTAINER_PGBACKUP=$(./dc ps --quiet pgbackups);
docker cp $CONTAINER_PGBACKUP:/backups ./backups;
CONTAINER_SERVEUR=$(./dc ps --quiet serveur);
docker cp $CONTAINER_SERVEUR:/app/storage ./backups;
CONTAINER_METABASE=$(./dc ps --quiet metabase);
docker cp $CONTAINER_METABASE:/metabase-data/ ./backups;
lftp -u $BACKUP_UTILISATEUR,$BACKUP_PASSWORD -e "set ftp:ssl-allow no; mkdir /backups/{{docker_compose_environnement.COMPOSE_PROJECT_NAME}}; mirror --reverse --delete backups /backups/{{docker_compose_environnement.COMPOSE_PROJECT_NAME}}; quit" $BACKUP_SERVEUR;