Merge pull request #78 from PinHouse/refactor/코드-리팩토링 #54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 핀하우스 dev CI-CD 파이프라인 | |
| ### develop으로 Merge 되었을 때, 테스트 코드를 실행하여, 빌드 및 배포하는 로직을 수행한다. | |
| on: | |
| push: | |
| branches: [ "develop"] | |
| jobs: | |
| #1. 개발 서버 CI, Build 용 | |
| CI: | |
| runs-on: ubuntu-22.04 | |
| services: | |
| mysql: | |
| image: mysql:8.0 | |
| ports: | |
| - '3306:3306' | |
| env: | |
| MYSQL_DATABASE: pinhouse_test | |
| MYSQL_USER: testuser | |
| MYSQL_PASSWORD: testpass | |
| MYSQL_ROOT_PASSWORD: root | |
| redis: | |
| image: redis:7.2.5 | |
| ports: | |
| - '6379:6379' | |
| mongo: | |
| image: mongo:6.0 | |
| ports: | |
| - 27017:27017 | |
| permissions: | |
| contents: write | |
| checks: write | |
| pull-requests: write | |
| steps: | |
| # 1. repository checkout | |
| - uses: actions/checkout@v4 | |
| # 2. jdk 환경 설치 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| # 3. '*.yml' 파일 세팅 | |
| - name: application.yml 파일 설정 | |
| run: | | |
| mkdir -p src/main/resources | |
| echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml | |
| echo "${{ secrets.APPLICATION_DEV_YML }}" > ./src/main/resources/application-dev.yml | |
| echo "${{ secrets.APPLICATION_OAUTH2_DEV_YML }}" > ./src/main/resources/application-oauth2-dev.yml | |
| mkdir -p src/test/resources | |
| echo "${{ secrets.APPLICATION_TEST_YML }}" > ./src/test/resources/application-test.yml | |
| # 체크 | |
| - name: MySQL 체크 | |
| run: | | |
| until nc -z localhost 3306; do | |
| echo "Waiting for MySQL..." | |
| sleep 3 | |
| done | |
| - name: Redis 체크 | |
| run: | | |
| until nc -z localhost 6379; do | |
| echo "Waiting for Redis..." | |
| sleep 3 | |
| done | |
| - name: MongoDB 체크 | |
| run: | | |
| until nc -z localhost 27017; do | |
| echo "Waiting for MongoDB..." | |
| sleep 3 | |
| done | |
| # 4. gradle 환경 설치 | |
| - name: Gradle Wrapper 권한 부여 | |
| run: chmod +x gradlew | |
| # 4-1. 캐싱 | |
| - name: Gradle Caching | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| gradle-${{ runner.os }} | |
| - name: Gradle 빌드 | |
| run: ./gradlew clean build | |
| # 5. JUnit 테스트 결과 게시 | |
| - name: Test 결과 출력 | |
| uses: EnricoMi/publish-unit-test-result-action@v2 | |
| if: always() | |
| with: | |
| junit_files: '**/build/test-results/test/TEST-*.xml' | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| #6. 도커 허브 로그인 | |
| - name: Docker 로그인 | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{secrets.DOCKER_USERNAME}} | |
| password: ${{secrets.DOCKER_ACCESS_TOKEN}} | |
| #7. 도커 이미지 Push | |
| - name: Docker 이미지 Push | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| dockerfile: Dockerfile | |
| push: true | |
| tags: ${{secrets.DOCKER_USERNAME}}/server:latest | |
| CD: | |
| needs: CI | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: 1. Checkout source code | |
| uses: actions/checkout@v3 | |
| - name: env 생성 | |
| run: echo "${{ secrets.ENV }}" > .env | |
| - name: 2. .env 파일 EC2에 전송 | |
| uses: appleboy/scp-action@master | |
| with: | |
| host: ${{ secrets.EC2_PUBLIC_IP }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.EC2_PRIVATE_KEY }} | |
| source: ".env" # 방금 생성한 .env 파일 | |
| target: "/home/ubuntu/app/pinhouse_docker/" | |
| - name: 3. docker-compose.yml 전달 | |
| uses: appleboy/scp-action@master | |
| with: | |
| host: ${{ secrets.EC2_PUBLIC_IP }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.EC2_PRIVATE_KEY }} | |
| source: "./pinhouse_docker/docker-compose.yml" | |
| target: "/home/ubuntu/app/" | |
| - name: 4. EC2에서 docker-compose 실행 | |
| uses: appleboy/ssh-action@master # SSH를 사용하여 EC2에서 명령 실행 | |
| with: | |
| host: ${{ secrets.EC2_PUBLIC_IP }} # EC2 퍼블릭 IP | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.EC2_PRIVATE_KEY }} | |
| script: | | |
| # docker-compose 명령어 실행 | |
| cd /home/ubuntu/app/pinhouse_docker/ | |
| docker compose pull spring | |
| docker compose up -d spring | |
| notify-discord: | |
| needs: | |
| - CD | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: 체크아웃 | |
| uses: actions/checkout@v2 | |
| - name: 최신 커밋 추출하기 | |
| id: commit-info | |
| run: | | |
| COMMIT_MSG=$(git log -1 --pretty=format:'%s') | |
| COMMIT_AUTHOR=$(git log -1 --pretty=format:'%an') | |
| COMMIT_HASH=$(git log -1 --pretty=format:'%h') | |
| echo "message=$COMMIT_MSG" >> $GITHUB_OUTPUT | |
| echo "author=$COMMIT_AUTHOR" >> $GITHUB_OUTPUT | |
| echo "hash=$COMMIT_HASH" >> $GITHUB_OUTPUT | |
| - name: 디스코드 알림 전송하기 | |
| uses: sarisia/actions-status-discord@v1 | |
| with: | |
| webhook: ${{secrets.DISCORD_WEBHOOK_URL}} | |
| title: "✅ 개발서버 배포" | |
| description: | | |
| **✅ 공지**: 개발 환경에 새로운 변경사항이 배포되었습니다. | |
| **배포 정보**: | |
| - 커밋: `${{ github.sha }}` | |
| - 배포자: ${{ github.actor }} | |
| - 시간: ${{ github.event.head_commit.timestamp }} | |
| [커밋 보기](${{ github.event.head_commit.url }}) | |
| color: 0x4287f5 | |
| username: 핀하우스 GitHub Dev Bot | |
| avatar_url: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png |