CI/CD 배포 파이프라인 구축
CI/CD 배포 파이프라인 구축
1. health check router
배포가 되었을때 상태 확인을 위해 health check router를 만들어 준다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
management:
endpoints:
health:
show-details: always
2. AWS
3. Github Actions
name: Backend CI
on:
push:
branches: [ dev ]
permissions:
contents: read
jobs:
build:
name: CI
runs-on: ubuntu-latest
steps:
- name: Pull Repository
uses: actions/checkout@v3
- name: Checkout private tools
uses: actions/checkout@v3
with:
repository: hongmoSung/properties
token: $
path: src/main/resources/properties
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@v2.10.0
with:
arguments: build
deployment:
name: CD
runs-on: ubuntu-latest
needs: build
steps:
- name: Pull Repository
uses: actions/checkout@v3
- name: Checkout private tools
uses: actions/checkout@v3
with:
repository: hongmoSung/properties
token: $
path: src/main/resources/properties
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@v2.10.0
with:
arguments: build
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: $
aws-secret-access-key: $
aws-region: ap-northeast-2
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push docker image to Amazon ECR
id: build-image
env:
REGISTRY: $
REPOSITORY: my-backend-ecr
IMAGE_TAG: $
run: |
docker build -t $REGISTRY/$REPOSITORY:latest .
docker push $REGISTRY/$REPOSITORY:latest
echo "image=$REGISTRY/$REPOSITORY:latest" >> $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: ./src/main/resources/properties/dev-task-definition.json
container-name: my-backend-contatiner
image: $
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: $
service: my-ecs-service
cluster: dev_my_cluster
wait-for-service-stability: false
Git submodule
설정 정보들을 공개하지 않기 위해서 사용…
# 서브 모듈을 등록
git submodule add --force https://github.com/hongmoSung/private_test.git
# 최신화
git submodule foreach git pull
느낀점
CI/CD 를 처음해봐서 너무 어려웠다.. AWS를 처음 써본것도 있지만.. 네트워크 지식이 너무 없어서 너무 많은 시간을 지체했다.
중간에 하현우 코치님과 멘토링이 많은 도움이 되었다. 요즘 클라우드 플랫폼을 많이 사용하는데 트랜드가 블랙리스트가 아닌 화이트리스트를 많이 선택한다는 것
그래서 네트워크를 새팅할때 허용해주는것을 잘 해야한다.(port, ip, iam 등등…)
그리고 아예 구축을 못할 뻔했는데 같은 기수분 중에 인프라를 테라폼으로 하신분이 공유해 주셨는데 그게 많은 도움이 되었다. AWS Console 에서 직접 하는것보다 코드로 보는게 더 직관적이고 쉬웠다.
댓글남기기