티스토리 뷰
인프라
Grafana, Loki를 ECS 환경에서 사용하여 모니터링, 로깅, 경보 시스템 구축하기 - (4) CI/CD 구축하기 (AWS CodePipeline)
김도리개발자 2023. 12. 14. 14:22앞의 글에서 인프라 구축, Grafana 설정까지 완료하였으니 CI/CD 구축을 해보자
이전에는 Github Actions 를 사용했었는데 비용 문제 등으로 인해 AWS CodePipeline 으로 넘어갔다.
추후 Terraform 코드로 작성할테지만 UI 로 설정해보자
Pipeline 은 Github Actions의 Job 처럼 생성하는 사람 마음대로 구성할 수 있다.
Source -> Build -> Deploy 순으로 실행되도록 파이프라인을 구성했다.
0️⃣ CodePipeline
1️⃣ Source
Github 의 특정 Repository 의 branch 와 연결하는 단계이다.
해당 Repository 에 특정 branch 에 commit/push 되면 트리거가 걸려 이 Code Pipeline 이 실행되도록 설정된다.
2️⃣ Build
- build project 를 생성한다.
3️⃣ Deploy
ECS 에 배포하는 경우 간단하게 Deploy 를 구축할 수 있다.
- 작업 공급자 ECS 로 선택하면 생성했던 클러스터 > 서비스 순으로 선택할 수 있다.
- 배포해야할 클러스터 > 서비스를 선택한다.
4️⃣ Spring Boot API Server 코드 추가
- ECR 에 접근하기 위한 로그인을 한다.
- 이미지에 추가할 태그값을 뽑는다.
- Spring Boot API Server 의 이미지를 빌드하여 태그를 지정한다.
- 이미지를 ECR Repo 에 push 한다.
version: 0.2
env:
variables:
ENV: "(환경)"
PROJECT: "(프로젝트 이름)"
phases:
pre_build:
commands:
- path="/$PROJECT/backend/$ENV/"
- ECR_REPO=$(aws ssm get-parameters --region ap-northeast-2 --names $path"ecr-url" --query Parameters[0].Value | sed 's/"//g')
- echo Logging in to Amazon ECR...
- aws --version
- echo $AWS_DEFAULT_REGION
- aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin "$(aws sts get-caller-identity --query Account --output text).dkr.ecr.ap-northeast-2.amazonaws.com"
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build --build-arg BUILD_ENV=$ENV -t $ECR_REPO:latest .
- docker tag $ECR_REPO:latest $ECR_REPO:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- docker push $ECR_REPO:latest
- docker push $ECR_REPO:$IMAGE_TAG
- printf '[{"name":"backend-container","imageUri":"%s"}]' $ECR_REPO:$IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json
- buildspec.yml
FROM openjdk:17-jdk-slim as builder
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY gradle.properties .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew bootJar
FROM openjdk:17-jdk-slim
ARG BUILD_ENV
ENV PROFILE="-Dspring.profiles.active=${BUILD_ENV}"
WORKDIR /app
COPY --from=builder build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT java $PROFILE -jar app.jar
- Dockerfile
이렇게 CI/CD 구축을 완료했다.
'인프라' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Hook
- 인프라
- 모니터링
- EC2
- LOKI
- VPC
- react
- SG
- github action
- 로깅
- CSS
- subnet
- redux
- ecr
- Grafana Alert
- Workflow
- springboot
- Grafana
- ALB
- 리액트
- Service
- html
- RDS
- Docker
- ECS
- javascript
- 서버
- js
- ci/cd
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함