백엔드 공부
CI/CD 정리 3편 - Github Actions 를 통해 CD 실습해보기
김용녀
2024. 1. 30. 09:00
바로 CD 를 작성해보자!
ci랑 cd를 같이 작성하는 사람들도 있는데, 우린 분리해서 작성했다.
CD 작성 전 , 필요한 것
- Docker 회원 가입 및 설치
- Aws 회원 가입 및 ec2 서버 열기
- ec2 서버에서 Docker 설치
cd 파일은 저 파이프라인 동작 과정을 적는 것이다.(db부분 제외)
팀프로젝트에선 main - develop - feature branch로 나눠서 작업을 했다.
feature에서 분업 후,
develop 에서 데이터를 합쳤기 때문에
CI가 일어나는 부분은 feature - develop 였다.
CD (배포하는 과정)는 develop -> main으로 push할 때만 작동하도록 작성했다.
name: Java CD with Gradle in smRt store
on:
workflow_dispatch:
push:
branches: [ "main" ]
permissions:
contents: read
jobs:
build-and-push-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# push 하기 위해 로그인
- name: Docker Hub 로그인
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_ID }}
password: ${{ secrets.DOCKER_PASSWORD }}
#도커 빌드 & 이미지 push
- name: Docker build & Push
run: |
docker build -f Dockerfile -t ${{ secrets.DOCKER_ID }}/smrt_store .
docker push ${{ secrets.DOCKER_ID }}/smrt_store
#docker 파일을 ec2 서버에 배포(pull)
- name: Deploy to Prod
uses: appleboy/ssh-action@master
id: deploy-prod
with:
host: ${{ secrets.EC2_HOST }}
username: ubuntu
key: ${{ secrets.EC2_PEM_KEY }}
port: 22
script: |
if [ ! -z "$(docker ps -q)" ]; then
docker stop $(docker ps -q)
fi
if [ ! -z "$(docker ps -aq)" ]; then
docker rm $(docker ps -aq)
fi
docker login -u ${{ secrets.DOCKER_ID }} -p ${{ secrets.DOCKER_PASSWORD }}
docker pull ${{ secrets.DOCKER_ID }}/smrt_store
docker run -d \
--log-driver=awslogs \
--log-opt awslogs-region=ap-northeast-2 \
--log-opt awslogs-group=web \
--log-opt awslogs-stream=log \
--name smrt_store \
-p 8080:8080 \
-e TZ=Asia/Seoul \
${{ secrets.DOCKER_ID }}/smrt_store
docker pull redis
docker run -d \
--name smrt-redis \
-p 6379:6379 \
redis
docker system prune -f
Reference