Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
Tags
- 포트번호
- unnest
- 쿼리스트링
- secret코드
- 패스파라미터
- 스테이지어스
- JWT 쓰는 방법
- 3계층구조
- 알림생성
- Winston
- JWT 쓰는이유
- 환경변수
- 이미지가 포함된 게시글
- 메뉴바
- 게시글 이미지 업로드
- JSON Web Token
- 네비게이션 한번에
- getComputedStyle
- 부트캠프
- N+1
- 알림생성모듈
- element.style
- 메뉴바 한번에
- 토큰
- .env
- 레포지토리
- route 53
- N+1문제
- JWT
- 게시글 이미지
Archives
- Today
- Total
기주
[CI/CD] 컨테이너 환경에서 CI/CD 구축하기 본문
컨테이너 환경에서 CI/CD 구축하기
CI/CD 흐름
1. 깃허브푸시
2. 깃허브액션에서 도커이미지 생성
3. 도커 이미지를 ECR로 전달
4.(깃허브액션이 EC2에게) ECR로부터 도커 이미지를 다운받아 배포진행하도록 명령
5.(EC2가) 도커이미지 다운후 배포진행
장점
도커 컨테이너 기반의 서비스일때 가장 간단하게 구성할 수 있는 인프라 구조
단점
무중단배포를 구현하거나 여러 EC2 인스턴승 배포해야하는 상황이라면 직접 깃허브액션 스크립트에 작성해서 구현해야한다. 꽤 복잡해진다.
언제쓰는방식인가?
컨테이너 기반으로 인프라를 구성했을때 이방법을 많이 활용한다.
서버 여러대 운영하지않을 정도의 소규모 프로젝트일때 주로 활용
준비사항
0. AWS CLI설치
로컬, ec2모두에 설치
설치방법:
1. Ec2 우분투에서 도커, 도커컴포즈 설치
sudo apt-get update && \
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
sudo apt-key fingerprint 0EBFCD88 && \
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
sudo apt-get install -y docker-ce && \
sudo usermod -aG docker ubuntu && \
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 잘 설치됐는 지 확인
docker -v # Docker 버전 확인
docker compose version # Docker Compose 버전 확인
2. Github Actions의 IAM에 권한 추가
2-1) AmazonEC2ContainerRegistryFullAccess 권한 추가
2-2) 깃허브 레포지토리에 사용자 액세스키 등록
3. AWS ECR 생성
준비사항 끝
1.dockerfile 작성하기
dockerfile
FROM node:alpine
WORKDIR /usr/src/app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD [ "node", "dist/main.js" ]
.dockerignore
/dist
/node_modules
/build
.env
2.EC2가 Private ECR에 접근할 수 있게 세팅
2-1) Amazon ECR Docker Credential Helper 설치하기
# Ubuntu일 경우
sudo apt update
sudo apt install amazon-ecr-credential-helper
2-2) Configuration 설정하기
`~` 경로에서 `.docker`라는 폴더 만들고, `config.json` 파일 만들어서 위와 같이 작성해라.
~/.docker/config.json
{
"credsStore": "ecr-login"
}
2-3) IAM Role을 활용해 EC2가 ECR에 접근할 수 있도록 권한부여하기
EC2에 연결되어있는 IAM 역할에 AmazonEC2ContainerRegistryFullAccess권한 부여
3. docker기반 CI/CD구축하기
3-1) GitHub actions파일 작성
name: 컨테이너환경 배포
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github 레포지토리 파일 불러오기
uses: actions/checkout@v4
- name: node설치
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 의존성설치
run: npm ci
- name: .env파일만들기
run: |
touch .env
echo '${{ secrets.ENV }}' >> .env
- name: 테스트코드 실행
run: npm run test
- name: AWS Resource에 접근할수 있게 AWS credential설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_ACCESS_SECRET_KEY }}
- name: ECR에 로그인
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Docker 이미지 생성
run: docker build -t docker-cicd-practice .
- name: Docker 이미지에 Tag 붙이기
run: docker tag docker-cicd-practice ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
- name: ECR에 Docker 이미지 Push하기
run: docker push ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
#EC2 ip
#EC2 유저 ubuntu
#EC2 keypair 내용
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.AWS_EC2_HOST }}
username: ${{ secrets.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_PRIVATE_KEY }}
script_stop: true
script: |
docker stop docker-cicd-practice || true
docker rm docker-cicd-practice || true
docker pull ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
docker run -d --name docker-cicd-practice -p 3000:3000 ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
3-2) CI/CD 과정 잘 작동하는지 확인
'devops > CICD' 카테고리의 다른 글
[CI/CD] 컨테이너 환경에서 CI/CD 구축하기(+code deploy 적용) (0) | 2024.12.14 |
---|---|
[CI/CD] github-actions를 이용한 CI/CD구축-3 (+AWS code deploy) (0) | 2024.12.04 |
[CI/CD] Github-Actions로 CI/CD 구축하기-2 개선 (0) | 2024.12.04 |
[CI/CD] Github-Actions로 CI/CD 구축하기-1 (0) | 2024.12.04 |
[Github-Actions] Github-Actions와 CI/CD 알아보기 (0) | 2024.12.04 |