정구리의 우주정복

[Git Action] Git Action CI/CD 구축하기 본문

JAVA/PROJECT

[Git Action] Git Action CI/CD 구축하기

Jungry_ 2024. 10. 1. 18:32
반응형

나도 멋진 CI/CD 를 갖고싶다

 

Git Action 을 사용해서 만들어봐야징

 

서버는 Synology 사용했다

git action 작성하는거는 어렵지 않았는데 서버 설정이 굉장히 어려웠음 ..

 

폴더는 .github > workflows > deploy.yml 생성하면 된덩

 

name: CI/CD for Synology

on:
  pull_request:
    branches:
      - main
    types:
      - closed

jobs:
  build:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up JDK 21
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '21'

      - name: Build with Gradle
        run: ./gradlew build

      - name: Build Docker image
        run: docker build -t ${{ secrets.DOCKER_REGISTRY }}/moneymoa-backend:latest .

      - name: Login to Synology Docker
        run: echo ${{ secrets.SYNOLOGY_PASSWORD }} | docker login ${{ secrets.DOCKER_REGISTRY }} -u "${{ secrets.SYNOLOGY_USER }}" --password-stdin

      - name: Push Docker image
        run: docker push ${{ secrets.DOCKER_REGISTRY }}/moneymoa-backend:latest

      - name: Deploy to Synology server
        uses: appleboy/ssh-action@v0.1.0
        with:
          host: ${{ secrets.SYNOLOGY_DOMAIN }}
          username: ${{ secrets.SYNOLOGY_USER }}
          password: ${{ secrets.SYNOLOGY_PASSWORD }}
          port: ${{ secrets.SYNOLOGY_PORT }}
          script: |
            container_id=$(/usr/local/bin/docker ps -aq --filter name=moneymoa-backend)
            
            if [ -n "$container_id" ]; then
              /usr/local/bin/docker stop moneymoa-backend 
              /usr/local/bin/docker rm moneymoa-backend;
            fi

            /usr/local/bin/docker pull ${{ secrets.DOCKER_REGISTRY }}/moneymoa-backend:latest
            /usr/local/bin/docker run -d --name moneymoa-backend -p 48977:48977 ${{ secrets.DOCKER_REGISTRY }}/moneymoa-backend:latest --network my_network

 

크게는 on, jobs 두개로 나뉜다

on 에는 어떤 경우에 git action 을 동작시킬지

jobs 에는 어떤 동작들을 시킬지 정의 하면 됨 !!!

 

나는 main 에 pr 을 통해서 코드가 merge 되어 pr 이 close 된 경우 cicd가 돌게끔 만들었다 

이후에는 gradle build > docker image 생성 > 생성한 이미지 서버에 push > push 한 이미지로 container build 하는 순서로 작성했다 

 

Secret 설정은 여기서 뚱뚱뚱 하면 된당

 

job 에서 정의한 과정대로 CI/CD가 도는걸 볼 수 있다 ㅜㅜ 

 

해보기전에는 겁나 어렵게 느껴졌었는데 실제로 해보니까 그냥 순서대로 명령어 실행해주는 스크립트 ? 인것같다 물론 더 깊게 들어가면 굉장히 어려워지겠지만 나는 응애라서 이정도만 .. 푸히히 재밌다

반응형
Comments