forked from ko-itbuddy/hanghea99-0010-commerce
-
Notifications
You must be signed in to change notification settings - Fork 0
126 lines (109 loc) · 5.19 KB
/
aws.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
# This workflow will build and push a new container image to Amazon ECR,
# and then will deploy a new task definition to Amazon ECS, when there is a push to the "main" branch.
#
# To use this workflow, you will need to complete the following set-up steps:
#
# 1. Create an ECR repository to store your images.
# For example: `aws ecr create-repository --repository-name my-ecr-repo --region us-east-2`.
# Replace the value of the `ECR_REPOSITORY` environment variable in the workflow below with your repository's name.
# Replace the value of the `AWS_REGION` environment variable in the workflow below with your repository's region.
#
# 2. Create an ECS task definition, an ECS cluster, and an ECS service.
# For example, follow the Getting Started guide on the ECS console:
# https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun
# Replace the value of the `ECS_SERVICE` environment variable in the workflow below with the name you set for the Amazon ECS service.
# Replace the value of the `ECS_CLUSTER` environment variable in the workflow below with the name you set for the cluster.
#
# 3. Store your ECS task definition as a JSON file in your repository.
# The format should follow the output of `aws ecs register-task-definition --generate-cli-skeleton`.
# Replace the value of the `ECS_TASK_DEFINITION` environment variable in the workflow below with the path to the JSON file.
# Replace the value of the `CONTAINER_NAME` environment variable in the workflow below with the name of the container
# in the `containerDefinitions` section of the task definition.
#
# 4. Store an IAM user access key in GitHub Actions secrets named `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
# See the documentation for each action used below for the recommended IAM policies for this IAM user,
# and best practices on handling the access key credentials.
name: Deploy to Amazon ECS
on:
push:
branches: [ "main","cbt","dev"]
workflow_dispatch:
env:
AWS_REGION: ap-northeast-2
CONTAINER_NAME: api
ECS_CLUSTER: cicd-cluster
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Set Varialbe By Branch Name
id: variable
run: |
echo "Running on branch ${{ github.ref_name }}"
if [ "${{ github.ref_name }}" = "main" ]; then
echo "ecrRepositoryName=hanghea99-plus-0010-prd" >> $GITHUB_OUTPUT
echo "ecsService=cicd2" >> $GITHUB_OUTPUT
echo "ecsTask=.github/aws/ecs-task-prd.json" >> $GITHUB_OUTPUT
elif [ "${{ github.ref_name }}" = "cbt" ]; then
echo "ecrRepositoryName=hanghea99-plus-0010-cbt" >> $GITHUB_OUTPUT
echo "ecsService=cicd-service-cbt" >> $GITHUB_OUTPUT
echo "ecsTask=.github/aws/ecs-task-cbt.json" >> $GITHUB_OUTPUT
elif [ "${{ github.ref_name }}" = "dev" ]; then
echo "ecrRepositoryName=hanghea99-plus-0010-dev" >> $GITHUB_OUTPUT
echo "ecsService=cicd-service-dev" >> $GITHUB_OUTPUT
echo "ecsTask=.github/aws/ecs-task-dev.json" >> $GITHUB_OUTPUT
elif [ "${{ github.ref_name }}" = "dbim" ]; then
echo "ecrRepositoryName=hanghea99-plus-0010-dev" >> $GITHUB_OUTPUT
echo "ecsService=cicd-service-dev" >> $GITHUB_OUTPUT
echo "ecsTask=.github/aws/ecs-task-dev.json" >> $GITHUB_OUTPUT
fi
- name: Get current date
id: date
run: echo "date=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
- 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
- uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('~/**/*.gradle*', '~/**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- run: docker build --tag my-image .
- name: Push to ECR
id: ecr
uses: jwalton/gh-ecr-push@v1
with:
access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
region: ${{ env.AWS_REGION }}
local-image: my-image
image: ${{ steps.variable.outputs.ecrRepositoryName }}:${{ steps.date.outputs.date }}
- 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: ${{ steps.variable.outputs.ecsTask }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.ecr.outputs.imageUrl }}
- 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: ${{ steps.variable.outputs.ecsService }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true