-
Notifications
You must be signed in to change notification settings - Fork 1
152 lines (137 loc) · 4.58 KB
/
main_release.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
142
143
144
145
146
147
148
149
150
151
152
name: Тесты и раскатка в продакшн
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-preprod-image:
name: Собираем pre-prod Docker
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Define preprod metadata
id: meta-preprod
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=preprod,enable=true
- name: Build and push preprod Docker
uses: docker/build-push-action@v5
with:
file: ./deployment/Dockerfile
context: .
push: true
build-args: |
BUILD_MODE=production
LAUNCH_MODE=preprod
APP_VERSION=${{ github.ref_name }}
tags: ${{ steps.meta-preprod.outputs.tags }}
labels: ${{ steps.meta-preprod.outputs.labels }}
build-prod-image:
name: Собираем production Docker
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Define production metadata
id: meta-prod
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=tag,enable=true
type=raw,value=prod,enable=true
type=raw,value=latest,enable=true
- name: Build and push production Docker
uses: docker/build-push-action@v4
with:
file: ./deployment/Dockerfile
context: .
push: true
build-args: |
BUILD_MODE=production
LAUNCH_MODE=production
APP_VERSION=${{ github.ref_name }}
tags: ${{ steps.meta-prod.outputs.tags }}
labels: ${{ steps.meta-prod.outputs.labels }}
deploy-preprod:
name: Раскатываем pre-prod среду
runs-on: [ self-hosted, Linux, testing ]
needs: build-preprod-image
environment:
name: Preprod
url: https://app.preprod.profcomff.com/
env:
CONTAINER_NAME: com_profcomff_app_preprod
permissions:
packages: read
steps:
- name: Run docker container
run: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:preprod
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
docker run \
--detach \
--restart on-failure:3 \
--network=web \
--name ${{ env.CONTAINER_NAME }} \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:preprod
undeploy-preprod:
name: Останавливаем pre-prod среду
runs-on: [ self-hosted, Linux, testing ]
needs: deploy-preprod
environment:
name: Preprod
env:
CONTAINER_NAME: com_profcomff_app_preprod
permissions:
packages: read
steps:
- name: Stop docker container
run: |
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
deploy-production:
name: Раскатываем production среду
runs-on: [ self-hosted, Linux, production ]
needs: [deploy-preprod, build-prod-image]
environment:
name: Production
url: https://app.profcomff.com/
env:
CONTAINER_NAME: com_profcomff_app
permissions:
packages: read
steps:
- name: Run docker container
run: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
docker run \
--detach \
--restart always \
--network=web \
--name ${{ env.CONTAINER_NAME }} \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod