-
Notifications
You must be signed in to change notification settings - Fork 1
170 lines (147 loc) · 5.94 KB
/
dev-ci-cd.yaml
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
name: dev-ci-cd
on:
push:
branches:
- main
workflow_dispatch: # for manual trigger
permissions:
id-token: write
jobs:
backend-ci:
runs-on: ubuntu-latest
services:
postgresql:
image: postgres:14.5-alpine
ports:
- 15432:5432
env:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: scc_test
defaults:
run:
working-directory: app-server
steps:
- uses: actions/checkout@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: adopt
java-version: 19
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
# https://github.com/actions/cache/blob/main/examples.md#java---gradle
- uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Gradle Check
run: ./gradlew clean check
- uses: actions/upload-artifact@v3
name: Upload Check Report If Failed
if: failure()
with:
name: test report
path: "**/build/reports"
retention-days: 1
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: arn:aws:iam::291889421067:role/github-action-ci-cd
aws-region: ap-northeast-2
- name: Build and Push Docker Image
run: ./gradlew jib -Pversion=latest-rc
- name: Notify CI failure to slack
if: failure()
run: |
CURRENT_GITHUB_ACTION_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"[DEV] Backend CI failed. <!subteam^S052B9W7129> (<$CURRENT_GITHUB_ACTION_RUN_URL|github action run url>)\"}" ${{ secrets.SLACK_URL_SCC_SERVER_CHANNEL }} -v
# frontend-ci:
# runs-on: ubuntu-latest
#
# defaults:
# run:
# working-directory: app-admin-frontend
#
# steps:
# - uses: actions/checkout@v3
#
# - name: Setup Node
# uses: actions/setup-node@v3
# with:
# node-version: 18
#
# - name: Install & Run openapi-generator
# run: |
# mkdir -p ~/bin/openapitools
# curl https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/bin/utils/openapi-generator-cli.sh > ~/bin/openapitools/openapi-generator-cli
# chmod u+x ~/bin/openapitools/openapi-generator-cli
# export PATH=$PATH:~/bin/openapitools/
#
# mv ~/bin/openapitools/openapi-generator-cli ~/bin/openapitools/openapi-generator
#
# OPENAPI_GENERATOR_VERSION=7.1.0 ./generate-api-spec.sh
#
# - name: Configure AWS Credentials
# uses: aws-actions/configure-aws-credentials@v2
# with:
# role-to-assume: arn:aws:iam::291889421067:role/github-action-ci-cd
# aws-region: ap-northeast-2
#
# - name: Build and Push Image
# run: ./docker-push.sh dev
#
# - name: Notify CI failure to slack
# if: failure()
# run: |
# CURRENT_GITHUB_ACTION_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
# curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"[DEV] Frontend CI failed. <!subteam^S052B9W7129> (<$CURRENT_GITHUB_ACTION_RUN_URL|github action run url>)\"}" ${{ secrets.SLACK_URL_SCC_SERVER_CHANNEL }} -v
cd:
runs-on: ubuntu-latest
needs:
- backend-ci
# - frontend-ci
steps:
- uses: actions/checkout@v3
- name: Install kubeconfig
env:
SCC_K3S_KUBECONFIG: ${{ secrets.SCC_K3S_KUBECONFIG }}
run: |
mkdir -p ~/.kube && echo "$SCC_K3S_KUBECONFIG" > ~/.kube/config
- uses: azure/setup-helm@v1
with:
version: '3.8.2'
id: install-helm
- uses: azure/setup-kubectl@v3
with:
version: 'v1.24.1'
id: install-kubectl
- name: Upgrade scc-server helm chart
working-directory: infra/helm/scc-server
run: |
helm upgrade --install --namespace dev -f values-dev.yaml scc-server ./
- name: Restart deploy/scc-server # tag를 latest-rc로 고정해서 사용하기 때문에 helm upgrade --install만 해서는 새 버전의 이미지가 배포되지 않는다. 따라서 강제로 rollout을 해준다.
run: |
kubectl rollout restart deploy/scc-server -n dev
# - name: Upgrade scc-admin-frontend helm chart
# working-directory: infra/helm/scc-admin-frontend
# run: |
# helm upgrade --install --namespace dev -f values-dev.yaml scc-admin-frontend ./
#
# - name: Restart deploy/scc-admin-frontend # tag를 latest-rc로 고정해서 사용하기 때문에 helm upgrade --install만 해서는 새 버전의 이미지가 배포되지 않는다. 따라서 강제로 rollout을 해준다.
# run: |
# kubectl rollout restart deploy/scc-admin-frontend -n dev
- name: Notify CD failure to slack
if: failure()
run: |
CURRENT_GITHUB_ACTION_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"[DEV] scc-server deployment failed. <!subteam^S052B9W7129> (<$CURRENT_GITHUB_ACTION_RUN_URL|github action run url>)\"}" ${{ secrets.SLACK_URL_SCC_SERVER_CHANNEL }} -v
- name: Notify CD success to slack
if: success()
run: |
CURRENT_GITHUB_ACTION_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"[DEV] scc-server with latest version is deployed!\"}" ${{ secrets.SLACK_URL_SCC_SERVER_CHANNEL }} -v