-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathdeploy.yml
executable file
·105 lines (89 loc) · 3.82 KB
/
deploy.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
#
# Playbook for deploy simple frontend project
#
# exra-vars:
# project - project name
# tarballs - tarballs count (old releases)
- hosts: all
user: "{{ project }}"
vars:
projectName: "{{ project }}"
user: "{{ project }}"
type: "{{ build_type }}"
tasks:
- name: Set username
set_fact:
remote_user: "{{ user }}"
- name: Copy SSR build to prod directory
synchronize:
src: ./
dest: /var/www/{{ projectName }}/cs/releases/{{ansible_date_time.date}}-{{ansible_date_time.hour}}{{ansible_date_time.minute}}{{ansible_date_time.second}}
rsync_opts:
- "--exclude=node_modules"
- "--exclude=.git"
- "--exclude=deploy.yml"
- "--exclude=.gitlab-ci.yml"
when: type == 'ssr'
- name: Copy static build to prod directory
synchronize:
src: ./dist/
dest: /var/www/{{ projectName }}/cs/releases/{{ansible_date_time.date}}-{{ansible_date_time.hour}}{{ansible_date_time.minute}}{{ansible_date_time.second}}
rsync_opts:
- "--exclude=node_modules"
- "--exclude=.git"
- "--exclude=deploy.yml"
- "--exclude=.gitlab-ci.yml"
when: type == 'static'
- name: Save last deployed release path
shell: basename $(readlink -f "/var/www/{{ projectName }}/cs/current")
register: lastReleaseName
- name: Remove old symlink
shell: |
rm -f /var/www/{{ projectName }}/cs/current/.env
rm -f /var/www/{{ projectName }}/cs/current
- name: Make symlink for new prod
shell: |
mkdir -p /var/www/{{ projectName }}/cs/shared
ln -s /var/www/{{ projectName }}/cs/releases/{{ansible_date_time.date}}-{{ansible_date_time.hour}}{{ansible_date_time.minute}}{{ansible_date_time.second}} /var/www/{{ projectName }}/cs/current
ln -s /var/www/{{ projectName }}/cs/shared/.env /var/www/{{ projectName }}/cs/releases/{{ansible_date_time.date}}-{{ansible_date_time.hour}}{{ansible_date_time.minute}}{{ansible_date_time.second}}/.env
- name: Kill old application
shell: pm2 delete -s {{ projectName }}
environment:
PATH: /home/{{ projectName }}/.nvm/versions/default/bin
register: command_result
failed_when: "'ERROR' in command_result.stderr"
when: type == 'ssr'
- name: Run new deployed application
shell: |
cd /var/www/{{ projectName }}/cs/current
yarn
npm rebuild node-sass
ln -s /var/www/{{ projectName }}/cs/shared/config.json /var/www/{{ projectName }}/cs/current/src/server/config.json
NODE_PATH=./src NODE_ENV=production APP_ENV=staging PORT=3000 pm2 start ./server-build.js -n {{ projectName }}
ignore_errors: yes
args:
executable: /bin/bash
environment:
PATH: '$PATH:/home/{{ projectName }}/.nvm/versions/default/bin'
when: type == 'ssr'
register: run_result
# Archive old release version and save state
- archive:
path: /var/www/{{ projectName }}/cs/releases/{{ lastReleaseName.stdout }}
dest: /var/www/{{ projectName }}/cs/releases/{{ lastReleaseName.stdout }}.tar.gz
register: tarballCreatingState
- name: Clean old release path
file:
state: absent
path: "/var/www/{{ projectName }}/cs/releases/{{ lastReleaseName.stdout }}"
register: deleteResult
when: tarballCreatingState.failed == false
- name: Get count of exist backups
shell: ls /var/www/{{ projectName }}/cs/releases/*.tar.gz | wc -l
register: existBackupsCount
- name: Calculate count of backups to delete
shell: ls -trd -1 /var/www/{{ projectName }}/cs/releases/*.tar.gz | head -{{ backupCountForRemove }} | xargs rm
vars:
backupCountForRemove: "{{ existBackupsCount.stdout|int - 3 }}"
register: backupsForDelete
when: existBackupsCount.stdout|int > 3