Skip to content

Commit 93bf954

Browse files
committed
fix: 배포시 테라폼 output을 이용하도록 수정
1 parent d136cbc commit 93bf954

File tree

1 file changed

+39
-101
lines changed

1 file changed

+39
-101
lines changed

.github/workflows/deploy-dev.yml

Lines changed: 39 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ on:
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

1213
permissions:
1314
contents: read
15+
pull-requests: write
16+
issues: write
1417

1518
env:
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

Comments
 (0)