Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
24a0433
[BE] setting: 변경사항 감지용 main.yml workflow 세팅 (#24)
bianbbc87 Feb 3, 2025
85c9fd4
[BE] setting: ecr build push용 action.yml 설정, action.yml 파일 하나로 통합 (#24)
bianbbc87 Feb 3, 2025
b62e2f5
[BE] setting: local용 dockerfile, docker-compose 파일 설정 (#24)
bianbbc87 Feb 4, 2025
9199774
[BE] setting: 테스트용 default-label 변경 (#24)
bianbbc87 Feb 4, 2025
2a6d1d8
[BE] refactor: docker compose용 env 추가 (임시) (#24)
bianbbc87 Feb 4, 2025
2d80412
[BE] refactor: test용 workflow trigger push로 변경 (#24)
bianbbc87 Feb 4, 2025
026e318
[BE] refactor: 대상 branch 변경 (#24)
bianbbc87 Feb 4, 2025
f0bd12b
[BE] feat: 서버별 dockerfile 추가 (#24)
bianbbc87 Feb 4, 2025
8382ccd
[BE] refactor: 첫 액션인 경우 코드 반영 (#24)
bianbbc87 Feb 4, 2025
fc13a79
[BE] fix: if문 문법 오류 해결 (#24)
bianbbc87 Feb 4, 2025
4b0dd03
[BE] refactor: test용 빌드 (#24)
bianbbc87 Feb 4, 2025
6637bcf
[BE] refactor: test용 빌드 (#24)
bianbbc87 Feb 4, 2025
907807f
[BE] refactor: test용 빌드 (#24)
bianbbc87 Feb 4, 2025
78ffbfb
[BE] fix: composite에서는 secret key 사용 불가 이슈 해결 (#24)
bianbbc87 Feb 4, 2025
0f075a8
[BE] fix: gradlew not found 이슈 해결 (#24)
bianbbc87 Feb 4, 2025
0f120d3
[BE] fix: not found action.yml 이슈 해결 (#24)
bianbbc87 Feb 4, 2025
3303efe
[BE] refactor: dockerfile 변경사항 반영 (#24)
bianbbc87 Feb 4, 2025
8e6eaea
[BE] refactor: 임시로 kotlin lint 제거 (#24)
bianbbc87 Feb 5, 2025
88b0bda
[BE] refactor: test용 push (#24)
bianbbc87 Feb 5, 2025
d42b3e8
[BE] refactor: msa, service, chat key 분리 (#24)
bianbbc87 Feb 5, 2025
4361565
[BE] refactor: ec2 배포 명령어 추가 (#24)
bianbbc87 Feb 9, 2025
3908eb6
[BE] refactor: actions secret 오타 제거 (#24)
bianbbc87 Feb 9, 2025
ff799f6
[BE] refactor: tab 오타 수정 (#24)
bianbbc87 Feb 9, 2025
96974bc
[BE] refactor: aws iam 인증 수정 (#24)
bianbbc87 Feb 9, 2025
fa6956f
[BE] refactor: ssh actions port 추가 (#24)
bianbbc87 Feb 9, 2025
1ab4d67
[BE] refactor: test용 출력 추가 (#24)
bianbbc87 Feb 9, 2025
7cc2212
[BE] refactor: test용 출력 추가 (#24)
bianbbc87 Feb 9, 2025
eb86ab4
[BE] refactor: container port 문자열 출력 에러 해결 (#24)
bianbbc87 Feb 9, 2025
53276ac
[BE] refactor: container port secret -> inputs로 변경 (#24)
bianbbc87 Feb 9, 2025
e133b34
[BE] refactor: run 문법 픽스 (#24)
bianbbc87 Feb 9, 2025
3ba3b60
[BE] refactor: shell 속성 추가 (#24)
bianbbc87 Feb 9, 2025
2d98feb
[BE] refactor: container port 매핑 조건 추가 (#24)
bianbbc87 Feb 9, 2025
ad69575
[BE] refactor: apigateway ecr uri 오타 수정 (#24)
bianbbc87 Feb 9, 2025
a030679
[BE] refactor: 서버별별 bootstrap, config application.yml 주입 (#24)
bianbbc87 Feb 9, 2025
f4a181f
[BE] refactor: script 내부 주석 제거 (#24)
bianbbc87 Feb 9, 2025
ad4e9fa
[BE] refactor: 들여쓰기 제거 (#24)
bianbbc87 Feb 9, 2025
5ebb7e5
[BE] refactor: 들여쓰기 제거 (#24)
bianbbc87 Feb 9, 2025
3e5e617
[BE] refactor: EOF 제외 들여쓰기 제거 (#24)
bianbbc87 Feb 9, 2025
de34dbb
[BE] refactor: EOF 들여쓰기 제거 (#24)
bianbbc87 Feb 9, 2025
b9a3355
[BE] refactor: EOF 들여쓰기 제거 (#24)
bianbbc87 Feb 9, 2025
9b0848d
[BE] refactor: yaml 문법 오류 fix (#24)
bianbbc87 Feb 9, 2025
5a9d7f6
[BE] refactor: EOF -> echo로 변경 (#24)
bianbbc87 Feb 9, 2025
93018a5
[BE] refactor: 특정 container만 제거로 변경 (#24)
bianbbc87 Feb 10, 2025
aae5d27
[BE] refactor: 트리거 main pr로 변경 (#24)
bianbbc87 Feb 10, 2025
be95f31
[BE] refactor: config jvm 메모리 제한 추가 (#24)
bianbbc87 Feb 10, 2025
1885109
[BE] refactor: dockerfile -> docker-compose로 변경 (#24)
bianbbc87 Feb 10, 2025
6446c61
[BE] refactor: dockerfile -> docker-compose로 변경 (#24)
bianbbc87 Feb 10, 2025
377d3f9
[BE] refactor: actions 오타 수정 (#24)
bianbbc87 Feb 10, 2025
7b59d97
[BE] refactor: ecr push를 compose에서 dockerfile로 변경 (#24)
bianbbc87 Feb 10, 2025
bf2170e
[BE] refactor: docker compose generate echo로 변경 (#24)
bianbbc87 Feb 10, 2025
bc5b3ec
[BE] refactor: docker context -> image로 변경 (#24)
bianbbc87 Feb 10, 2025
9bd5b0e
[BE] refactor: 기준 브랜치 main으로 변경 (#24)
bianbbc87 Feb 10, 2025
06a6edf
[BE] refactor: kotlin lint 제거 (#24)
bianbbc87 Feb 10, 2025
8a43ef5
[BE] refactor: docker compose container name 지정 (#24)
bianbbc87 Feb 10, 2025
aff8b31
[BE] refactor: config ram limit 제거 (#24)
bianbbc87 Feb 10, 2025
1a1d9ea
[BE] refactor: user server compose에 redis 추가 (#24)
bianbbc87 Feb 10, 2025
d0fdb68
[BE] refactor: service ec2 network host 를 docker host로 변경 (#24)
bianbbc87 Feb 11, 2025
6e2d8cf
[BE] refactor: user server prefer ip 추가 (#24)
bianbbc87 Feb 11, 2025
c8b02fd
[BE] refactor: docker compose volume 제거 코드 추가 (#24)
bianbbc87 Feb 11, 2025
630a058
[BE] refactor: hostname 변경 내용 추가 (#24)
bianbbc87 Feb 11, 2025
64e81e0
[BE] refactor: hostname 변경 내용 제거, config로 이관 (#24)
bianbbc87 Feb 11, 2025
f6700b7
[BE] refactor: ip 고정으로 변경 (#24)
bianbbc87 Feb 11, 2025
3f34459
[BE] refactor: port 지정 잠시 해제 (#24)
bianbbc87 Feb 11, 2025
cfb13bf
[BE] refactor: user server 재부팅 (#24)
bianbbc87 Feb 11, 2025
3d97548
[BE] refactor: user server 재부팅 (#24)
bianbbc87 Feb 11, 2025
de5e18f
[BE] refactor: expose -> ports로 변경 (#24)
bianbbc87 Feb 11, 2025
e3fdf5d
[BE] refactor: user default zone 변경 (#24)
bianbbc87 Feb 11, 2025
e8b8012
[BE] refactor: 변경사항 roll back (#24)
bianbbc87 Feb 11, 2025
a321ce6
[BE] refactor: redis 연결 변경 (#24)
bianbbc87 Feb 11, 2025
7935df0
[BE] refactor: redis 연결 구성 host 제거 (#24)
bianbbc87 Feb 11, 2025
5b52635
[BE] refactor: api gateway 설정 변경 (#24)
bianbbc87 Feb 11, 2025
9c706c0
[BE] refactor: test용 api gateway 설정 변경 (#24)
bianbbc87 Feb 11, 2025
3aafb92
[BE] refactor: apigateway application.yml 주입 부분 제거 (#24)
bianbbc87 Feb 11, 2025
561808b
[BE] refactor: main 브랜치 기준으로 변경 (#24)
bianbbc87 Feb 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 222 additions & 0 deletions .github/actions/ecr-push/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# msa actions

name: "ECR Build & Push Action"
description: "Builds a Docker image and pushes it to Amazon ECR"

# be-main.yml에게 값을 받아와 사용 (with)
inputs:
namespace:
description: "ECR namespace (msa or service)"
required: true
folder:
description: "Path to the project folder"
required: true
ecr_repo:
description: "ECR repository name"
required: true
aws_access_key_id:
description: "AWS Access Key ID"
required: true
aws_secret_access_key:
description: "AWS Secret Access Key"
required: true
aws_region:
description: "AWS ECR region"
required: true
ecr_uri:
description: "AWS ECR uri"
required: true
ec2_ip:
description: "AWS EC2 public ip"
required: true
ec2_username:
description: "AWS EC2 usename"
required: true
ec2_ssh_key:
description: "AWS EC2 ssh key"
required: true
container_name:
description: "AWS EC2 container name"
required: true
container_port:
description: "AWS EC2 container port"
required: true
config_private_ip:
description: "Config private ip"
required: true
config_port:
description: "Config default port"
required: true
config_application_yml:
description: "Config application.yml"
required: true



runs:
using: "composite"
steps:
# 리포지토리 체크아웃
- name: Checkout repository
uses: actions/checkout@v3

# AWS 인증 설정
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ inputs.aws_access_key_id }}
aws-secret-access-key: ${{ inputs.aws_secret_access_key }}
aws-region: ap-northeast-2

# Amazon ECR 로그인
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2

- name: Generate dynamic bootstrap.yml & application.yml
shell: bash
run: |
if [[ "${{ inputs.container_name }}" == "config-server" ]]; then
# Generate bootstrap.yml for config-server
echo "encrypt:" > ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " key: ${{ inputs.config_private_ip }}" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml

# Generate application.yml
rm -f ${{ inputs.folder }}/src/main/resources/application.yml
echo "${{ inputs.config_application_yml }}" | base64 --decode > ${{ inputs.folder }}/src/main/resources/application.yml

elif [[ "${{ inputs.container_name }}" == "apigateway-server" ]]; then
# Generate bootstrap.yml for API Gateway
echo "spring:" > ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " application:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " name: ${{ inputs.container_name }}" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " cloud:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " config:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " uri: http://${{ inputs.config_private_ip }}:${{ inputs.config_port }}" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml

else
# Generate bootstrap.yml for other services
echo "spring:" > ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " application:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " name: ${{ inputs.container_name }}" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " cloud:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " config:" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
echo " uri: http://${{ inputs.config_private_ip }}:${{ inputs.config_port }}" >> ${{ inputs.folder }}/src/main/resources/bootstrap.yml
fi


# Docker 빌드 및 ECR에 푸시
- name: Build and push Docker image to Amazon ECR
shell: bash
# github commit hash를 이미지 태그로
run: |
ECR_REGISTRY=${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG=${{ github.sha }}
FULL_ECR_PATH=${{ steps.login-ecr.outputs.registry }}/${{ inputs.namespace }}/${{ inputs.ecr_repo }}

echo "Moving to project folder: ${{ inputs.folder }}"
cd ${{ inputs.folder }}

echo "Building Docker image..."
docker build -t $FULL_ECR_PATH:$IMAGE_TAG .

echo "Pushing image to Amazon ECR..."
docker push $FULL_ECR_PATH:$IMAGE_TAG

echo "Cleaning up sensitive file..."
rm -f src/main/resources/bootstrap.yml

echo "Build & Push completed!"

- name: EC2에서 ECR에 로그인하기
uses: appleboy/ssh-action@master
with:
host: ${{ inputs.ec2_ip }}
username: ${{ inputs.ec2_username }}
key: ${{ inputs.ec2_ssh_key }}
script: |
aws ecr get-login-password --region ${{ inputs.aws_region }} | sudo docker login --username AWS --password-stdin ${{ inputs.ecr_uri }}

- name: 기존 EC2에서 실행중인 컨테이너 종료 및 삭제
uses: appleboy/ssh-action@master
with:
host: ${{ inputs.ec2_ip }}
username: ${{ inputs.ec2_username }}
key: ${{ inputs.ec2_ssh_key }}
script: |
# docker-compose.yml 파일이 있는 경우만 실행
if [ -f "docker-compose.yml" ]; then
cd $COMPOSE_DIR
sudo docker compose down --rmi all
sudo docker volume prune -f
sudo docker network prune -f

# docker-compose.yml 파일 삭제
echo "docker-compose.yml 파일 삭제 중..."
rm -f docker-compose.yml
echo "docker-compose.yml 파일 삭제 완료."

else
echo "No docker-compose.yml found. Skipping docker compose down."
fi

- name: Generate docker-compose.yml for EC2 based on namespace
uses: appleboy/ssh-action@master
with:
host: ${{ inputs.ec2_ip }}
username: ${{ inputs.ec2_username }}
key: ${{ inputs.ec2_ssh_key }}
script: |
if [ "${{ inputs.namespace }}" == "msa" ]; then
echo "Generating docker-compose.yml for MSA architecture..."
echo "version: '3.8'" > docker-compose.yml
echo "" >> docker-compose.yml
echo "services:" >> docker-compose.yml
echo " apigateway-server:" >> docker-compose.yml
echo " image: ${{ inputs.ecr_uri }}/${{ inputs.namespace }}/${{ inputs.ecr_repo }}:${{ github.sha }}" >> docker-compose.yml
echo " container_name: ${{ inputs.container_name }}" >> docker-compose.yml
echo " ports:" >> docker-compose.yml
echo " - \"${{ inputs.container_port }}:${{ inputs.container_port }}\"" >> docker-compose.yml
echo " healthcheck:" >> docker-compose.yml
echo " test: [\"CMD-SHELL\", \"curl -f http://${{ inputs.container_name }}:${{ inputs.container_port }}/actuator/health || exit 1\"]" >> docker-compose.yml
echo " interval: 10s" >> docker-compose.yml
echo " timeout: 5s" >> docker-compose.yml
echo " retries: 2" >> docker-compose.yml
echo " restart: unless-stopped" >> docker-compose.yml

elif [ "${{ inputs.namespace }}" == "service" ]; then
echo "Generating docker-compose.yml for Service architecture..."
echo "version: '3.8'" > docker-compose.yml
echo "" >> docker-compose.yml
echo "services:" >> docker-compose.yml
echo " ${{ inputs.container_name }}:" >> docker-compose.yml
echo " image: ${{ inputs.ecr_uri }}/${{ inputs.namespace }}/${{ inputs.ecr_repo }}:${{ github.sha }}" >> docker-compose.yml
echo " network_mode: host" >> docker-compose.yml
echo " container_name: ${{ inputs.container_name }}" >> docker-compose.yml
echo " restart: unless-stopped" >> docker-compose.yml


if [ "${{ inputs.container_name }}" == "user-server" ]; then
echo " redis:" >> docker-compose.yml
echo " image: redis:latest" >> docker-compose.yml
echo " container_name: redis" >> docker-compose.yml
echo " ports:" >> docker-compose.yml
echo " - \"6379:6379\"" >> docker-compose.yml
echo " restart: unless-stopped" >> docker-compose.yml
fi

else
echo "Unknown namespace: ${{ inputs.namespace }}"
exit 1
fi

- name: Start container using Docker Compose
uses: appleboy/ssh-action@master
with:
host: ${{ inputs.ec2_ip }}
username: ${{ inputs.ec2_username }}
key: ${{ inputs.ec2_ssh_key }}
script: |
sudo docker compose up -d


Loading
Loading