ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

     

    https://velog.io/@jmjmjmz732002/%E5%AE%8C-Github-Action-Docker-EC2-Nginx-%ED%99%9C%EC%9A%A9%ED%95%9C-Springboot-CICD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-7-Github-Actions-CICD-docker-compose

Designed by Tistory.