44 push :
55 branches : [ develop ]
66 paths :
7+ - ' src/**'
78 - ' terraform/common/**'
89 - ' terraform/dev/**'
910 - ' .github/workflows/deploy-dev.yml'
1011 workflow_dispatch :
1112
1213permissions :
1314 contents : read
15+ pull-requests : write
16+ issues : write
1417
1518env :
1619 AWS_REGION : ap-northeast-2
@@ -22,102 +25,67 @@ jobs:
2225 steps :
2326 - uses : actions/checkout@v4
2427 - uses : hashicorp/setup-terraform@v3
28+
29+ - name : Configure AWS credentials
30+ uses : aws-actions/configure-aws-credentials@v4
31+ with :
32+ aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
33+ aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
34+ aws-region : ${{ env.AWS_REGION }}
35+
2536 - name : Terraform Init (common)
2637 run : terraform init
2738 working-directory : ./terraform/common
39+
2840 - name : Terraform Apply COMMON
29- env :
30- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
31- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
3241 run : terraform apply -auto-approve
3342 working-directory : ./terraform/common
3443
3544 terraform-apply-dev :
3645 name : Terraform Apply dev
3746 runs-on : ubuntu-latest
3847 needs : terraform-apply-common
48+ outputs :
49+ tf_outputs_json : ${{ steps.get-outputs.outputs.data }}
3950 steps :
4051 - uses : actions/checkout@v4
4152 - uses : hashicorp/setup-terraform@v3
42- - name : Terraform Init (dev)
43- run : terraform init
44- working-directory : ./terraform/dev
45- - name : Terraform Apply dev
46- env :
47- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
48- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
49- run : terraform apply -auto-approve
50- working-directory : ./terraform/dev
53+ with :
54+ terraform_wrapper : false
5155
52- check-aws-resources :
53- runs-on : ubuntu-latest
54- needs : terraform-apply-dev
55- steps :
5656 - name : Configure AWS credentials
5757 uses : aws-actions/configure-aws-credentials@v4
5858 with :
5959 aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
6060 aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
6161 aws-region : ${{ env.AWS_REGION }}
6262
63- - name : Get AWS Resource Names (dev)
64- id : get-aws-names
65- run : |
66- CLUSTER=$(aws ecs list-clusters --region $AWS_REGION --query "clusterArns[]" --output text | tr '\t' '\n' | grep 'dev' | head -n 1 | awk -F'/' '{print $2}')
67- if [ -z "$CLUSTER" ]; then
68- echo "Error: No ECS cluster name containing 'dev' found." >&2
69- exit 1
70- fi
71- echo "ECS_CLUSTER=$CLUSTER" >> $GITHUB_ENV
72-
73- SERVICE=$(aws ecs list-services --cluster $CLUSTER --region $AWS_REGION --query "serviceArns[]" --output text | tr '\t' '\n' | grep 'dev' | head -n 1 | awk -F'/' '{print $2}')
74- if [ -z "$SERVICE" ]; then
75- echo "Error: No ECS service name containing 'dev' found." >&2
76- exit 1
77- fi
78- echo "ECS_SERVICE=$SERVICE" >> $GITHUB_ENV
79-
80- TASK_DEF_ARN=$(aws ecs describe-services --cluster $CLUSTER --services $SERVICE --region $AWS_REGION --query "services[0].taskDefinition" --output text)
81- if [ -z "$TASK_DEF_ARN" ]; then
82- echo "Error: No ECS task definition ARN found." >&2
83- exit 1
84- fi
85- TASK_DEF_NAME=$(basename "$TASK_DEF_ARN" | cut -d':' -f1)
86- echo "ECS_TASK_DEFINITION=$TASK_DEF_NAME" >> $GITHUB_ENV
63+ - name : Terraform Init (dev)
64+ run : terraform init
65+ working-directory : ./terraform/dev
8766
88- CONTAINER_NAME=$(aws ecs describe-task-definition --task-definition $TASK_DEF_ARN --region $AWS_REGION --query "taskDefinition.containerDefinitions[].name" --output text | tr '\t' '\n' | grep 'dev' | head -n 1)
89- if [ -z "$CONTAINER_NAME" ]; then
90- CONTAINER_NAME=$(aws ecs describe-task-definition --task-definition $TASK_DEF_ARN --region $AWS_REGION --query "taskDefinition.containerDefinitions[0].name" --output text)
91- fi
92- if [ -z "$CONTAINER_NAME" ]; then
93- echo "Error: No ECS container name found." >&2
94- exit 1
95- fi
96- echo "CONTAINER_NAME=$CONTAINER_NAME" >> $GITHUB_ENV
67+ - name : Terraform Apply dev
68+ run : terraform apply -auto-approve
69+ working-directory : ./terraform/dev
9770
98- REPO=$(aws ecr describe-repositories --region $AWS_REGION --query "repositories[].repositoryName" --output text | tr '\t' '\n' | grep 'dev' | head -n 1)
99- if [ -z "$REPO" ]; then
100- REPO=$(aws ecr describe-repositories --region $AWS_REGION --query "repositories[0].repositoryName" --output text)
101- fi
102- if [ -z "$REPO" ]; then
103- echo "Error: No ECR repository found." >&2
104- exit 1
105- fi
106- echo "ECR_REPOSITORY=$REPO" >> $GITHUB_ENV
71+ - name : Get Terraform Outputs
72+ id : get-outputs
73+ run : echo "data=$(terraform output -json)" >> $GITHUB_OUTPUT
74+ working-directory : ./terraform/dev
10775
10876 deploy-service :
10977 name : Deploy to Amazon ECS
11078 runs-on : ubuntu-latest
11179 environment : develop
112- needs : check-aws-resources
80+ needs : terraform-apply-dev
11381 env :
114- ECR_REPOSITORY : ${{ env.ECR_REPOSITORY }}
115- ECS_CLUSTER : ${{ env.ECS_CLUSTER }}
116- ECS_SERVICE : ${{ env.ECS_SERVICE }}
117- ECS_TASK_DEFINITION : ${{ env.ECS_TASK_DEFINITION }}
118- CONTAINER_NAME : ${{ env.CONTAINER_NAME }}
119-
82+ ECR_REPOSITORY : ${{ fromJSON(needs.terraform-apply-dev.outputs.tf_outputs_json).ecr_repository_name.value }}
83+ ECS_CLUSTER : ${{ fromJSON(needs.terraform-apply-dev.outputs.tf_outputs_json).ecs_cluster_name.value }}
84+ ECS_SERVICE : ${{ fromJSON(needs.terraform-apply-dev.outputs.tf_outputs_json).ecs_service_name.value }}
85+ CONTAINER_NAME : ${{ fromJSON(needs.terraform-apply-dev.outputs.tf_outputs_json).container_name.value }}
12086 steps :
87+ - uses : actions/checkout@v4
88+
12189 - name : Configure AWS credentials
12290 uses : aws-actions/configure-aws-credentials@v4
12391 with :
@@ -130,46 +98,16 @@ jobs:
13098 with :
13199 node-version : ' 22'
132100
133- - name : Prepare semantic-release config (release all types)
134- run : |
135- cat <<EOF > release.config.js
136- module.exports = {
137- branches: ['develop'],
138- plugins: [
139- [
140- '@semantic-release/commit-analyzer',
141- {
142- preset: 'conventionalcommits',
143- releaseRules: [
144- { type: 'feat', release: 'minor' },
145- { type: 'fix', release: 'patch' },
146- { type: 'perf', release: 'patch' },
147- { type: 'refactor', release: 'patch' },
148- { type: 'test', release: 'patch' },
149- { type: 'chore', release: 'patch' },
150- { type: 'ci', release: 'patch' },
151- { type: 'revert', release: 'patch' }
152- ]
153- }
154- ],
155- [
156- '@semantic-release/release-notes-generator',
157- { preset: 'conventionalcommits' }
158- ]
159- ]
160- };
161- EOF
162-
163101 - name : Semantic Release
164102 run : |
165103 OUTPUT=$(npx semantic-release --no-ci)
166104 echo "$OUTPUT"
167105 VERSION=$(echo "$OUTPUT" | grep -oP 'Published release \K[0-9.]+')
168- if [ ! -z "$VERSION" ]; then
169- echo "SEMANTIC_VERSION=$VERSION" >> $GITHUB_ENV
170- else
171- echo "Error: SEMANTIC_VERSION not extracted" && exit 1
106+ if [ -z "$VERSION" ]; then
107+ echo "릴리즈할 새로운 버전이 없습니다. 배포를 건너뜁니다."
108+ exit 0
172109 fi
110+ echo "SEMANTIC_VERSION=$VERSION" >> $GITHUB_ENV
173111 env :
174112 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
175113
@@ -207,8 +145,8 @@ jobs:
207145 - name : Get latest ECS task definition
208146 id : get-latest-task-def
209147 run : |
210- TASK_DEF =$(aws ecs describe-services --cluster ${ ECS_CLUSTER} --services ${ ECS_SERVICE} --region ${ AWS_REGION} --query "services[0].taskDefinition" --output text)
211- aws ecs describe-task-definition --task-definition $TASK_DEF --region ${ AWS_REGION} --query "taskDefinition" --output json > task-definition.json
148+ TASK_DEF_ARN =$(aws ecs describe-services --cluster "${{ env. ECS_CLUSTER }}" --services "${{ env. ECS_SERVICE }}" --region "${{ env. AWS_REGION }}" --query "services[0].taskDefinition" --output text)
149+ aws ecs describe-task-definition --task-definition "$TASK_DEF_ARN" --region "${{ env. AWS_REGION }}" --query "taskDefinition" --output json > task-definition.json
212150
213151 - name : Fill in the new image ID in the Amazon ECS task definition
214152 id : task-def
0 commit comments