-
Notifications
You must be signed in to change notification settings - Fork 3
142 lines (124 loc) · 4.1 KB
/
prod-cicd.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
name: Deploy Product to Amazon ECS
on:
push:
branches: [ "prod" ]
env:
AWS_REGION: ap-northeast-2
ECR_REPOSITORY: katj-prod
ECS_SERVICE: service-katj-prod
ECS_CLUSTER: katj-cluster-ecs-prod
CONTAINER_NAME: katj-prod
ECS_TASK_DEFINITION: katj-prod.json
permissions:
contents: read
jobs:
build-prod:
environment: prod
name: Build-prod
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '17'
# Link Check
- name: ktlint
uses: ScaCap/action-ktlint@master
with:
github_token: ${{ secrets.git_hub_token }}
reporter: github-pr-check # Change reporte
# application 파일 생성
- name: make application.yml
run: |
mkdir ./src/main/resources
cd ./src/main/resources
touch ./application.yml
echo "${{ secrets.YML }}" > ./application.yml
shell: bash
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
id: build
run: |
./gradlew clean build -x test
sudo find . -name katj-0.0.1-SNAPSHOT.jar
ls build/libs
#
# - name: Copy Jar file
# run: mv build/libs/${ls build/libs) app.jar
- name: Upload Jar file
uses: actions/upload-artifact@v3
with:
name: jar-file
path: build/libs/*
deploy-prod:
name: Deploy-prod
runs-on: ubuntu-latest
environment: prod
needs: build-prod
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Download Jar file
uses: actions/download-artifact@v3
with:
name: jar-file
path: build/libs/*.jar
# - name: Set artifact
# run: echo "artifact=$(ls ./build/libs)" >> $GITHUB_ENV
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: latest
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
ls -al
docker build -f Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
sudo find . -name katj-0.0.1-SNAPSHOT.jar
ls -al
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
slack_noti:
name: Slack_notification
runs-on: ubuntu-latest
# needs: deploy-prod
steps:
- name: action-slack
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: www-be
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
if: always() # Pick up events even if the job fails or is canceled.