diff --git a/.github/workflows/cicd-be.yml b/.github/workflows/cicd-be.yml new file mode 100644 index 00000000..055b7176 --- /dev/null +++ b/.github/workflows/cicd-be.yml @@ -0,0 +1,112 @@ +name: Backend CI/CD + +on: + push: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Check out Repository + uses: actions/checkout@v3 + with: + token: ${{ secrets.ACTION_TOKEN }} + submodules: true + + - name: Display first three lines of application.yml (debug) + run: head -n 3 src/main/resources/application.yml + + - name: Set up JDK11 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + + - name: Gradle 캐싱 + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: ./gradlew clean build + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: cicdsample + path: build/libs/*.jar + + - name: Slack notification when build fail + if: failure() + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + author_name: [CI/CD] 백엔드 빌드 실패 + fields: repo, message, commit, author, action, eventName, ref, workflow, job, took + env: + SLACK_COLOR: '#FF2D00' + SLACK_USERNAME: 'Github Action' + SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_CICD }} + + deploy: + needs: build + runs-on: ubuntu-latest + steps: + - name: Download artifact + uses: actions/download-artifact@v2 + with: + name: cicdsample + + - name: Setup SSH + uses: webfactory/ssh-agent@v0.5.4 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Add known hosts + run: | + ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts + chmod 644 ~/.ssh/known_hosts + + - name: SCP transfer + run: scp *.jar ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:~/deploy + + - name: Execute remote shell script + run: | + ssh ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }} "chmod +x ./deploy.sh" + ssh ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }} "./deploy.sh" + + - name: Slack notification when deploy fail + if: failure() + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + author_name: [CI/CD] 백엔드 배포 실패 + fields: repo, message, commit, author, action, eventName, ref, workflow, job, took + env: + SLACK_COLOR: '#FF2D00' + SLACK_USERNAME: 'Github Action' + SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_CICD }} + + - name: Slack notification when deploy success + if: success() + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + author_name: [CI/CD] 백엔드 배포 성공 + fields: repo, message, commit, author, action, eventName, ref, workflow, job, took + env: + SLACK_COLOR: '#0019F4' + SLACK_USERNAME: 'Github Action' + SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_CICD }} diff --git a/.github/workflows/test-fe.yml b/.github/workflows/test-fe.yml deleted file mode 100644 index 4c2de232..00000000 --- a/.github/workflows/test-fe.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Frontend PR Test - -on: - pull_request: - branches: - - main - - develop - paths: - - '.github/**' - - 'frontend/**' - -jobs: - test: - runs-on: ubuntu-latest - timeout-minutes: 10 - - permissions: - checks: write - pull-requests: write - - steps: - - name: Repository 체크아웃 - uses: actions/checkout@v3 - - - name: Node 설정 - uses: actions/setup-node@v3 - with: - node-version: '18.16.1' - - - name: node_modules 캐싱 - id: cache - uses: actions/cache@v3 - with: - path: '**/frontend/node_modules' - key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: 의존성 설치 - working-directory: frontend/ - if: steps.cache.outputs.cache-hit != 'true' - run: yarn install --pure-lockfile - - - name: 테스트 실행 - working-directory: frontend/ - run: yarn test - continue-on-error: true - - - name: 테스트 결과 PR에 코멘트 등록 - uses: EnricoMi/publish-unit-test-result-action@v2 - if: always() - with: - files: '**/frontend/test-results/results.xml' - - - name: 테스트 실패 시, 실패한 코드 라인에 Check 코멘트를 등록 - uses: mikepenz/action-junit-report@v3 - if: always() - with: - report_paths: '**/frontend/test-results/results.xml' - token: ${{ github.token }} - - - name: build 실패 시 Slack으로 알립니다 - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - author_name: 프론트엔드 테스트 실패 알림 - fields: repo, message, commit, author, action, eventName, ref, workflow, job, took - env: - SLACK_CHANNEL: group-dev - SLACK_COLOR: '#FF2D00' - SLACK_USERNAME: 'Github Action' - SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png - SLACK_TITLE: Build Failure - ${{ github.event.pull_request.title }} - SLACK_MESSAGE: PR Url - ${{ github.event.pull_request.url }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - if: failure() diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 160ab01e..5ab390eb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,9 +5,6 @@ on: branches: - main - develop - paths: - - '.github/**' - - 'backend/**' jobs: test: @@ -39,11 +36,9 @@ jobs: ${{ runner.os }}-gradle- - name: Gradle 권한 부여 - working-directory: backend/ - run: chmod +x ./gradlew + run: chmod +x gradlew - name: 테스트 실행 - working-directory: backend/ run: ./gradlew --info test - name: 테스트 결과 PR에 코멘트 등록 @@ -72,5 +67,5 @@ jobs: SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png SLACK_TITLE: Build Failure - ${{ github.event.pull_request.title }} SLACK_MESSAGE: PR Url - ${{ github.event.pull_request.url }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_PR_TEST }} if: failure()