GitHub Actions - boostcamp-2020/Project03-A-TOTP GitHub Wiki

๋ฐฐ๊ฒฝ

๊ทธ๋™์•ˆ ์‚ฌ์šฉํ•˜๋˜ Traivs CI๊ฐ€ ํฌ๋ ˆ๋”ง ์†Œ์ง„์œผ๋กœ ๋” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด์„œ(์˜คํ”ˆ์†Œ์Šค๋Š” ๋ฌด๋ฃŒ๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ?..) ์ด ๊ธฐํšŒ์— CI/CD๋ฅผ GitHub Actions๋กœ ๋ฐ”๊พธ๋ฉด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ

์„ค์ • ๊ณผ์ •

  1. ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ์˜ Settings - Secrets ์—์„œ ENV ๊ฐ’ ์ถ”๊ฐ€ image

  2. .github/workflows/ ๊ฒฝ๋กœ์— .yml ํ™•์žฅ์ž์˜ ์„ค์ •ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค

name: BE Deployment

on:
  push:
    branches:
      - release-BE

jobs:
  deploy:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.16.x]

    steps:
      - uses: actions/checkout@v2

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}

      - name: Npm Install
        working-directory: ./WEB/BE
        run: npm install

      - name: Make envfile
        working-directory: ./WEB/BE
        run: |
          touch .env
          echo NODE_ENV = production >> .env
          echo DBUSER = ${{ secrets.ENV_DBUSER }} >> .env
          echo DBPASS = ${{ secrets.ENV_DBPASS }} >> .env
          echo DBHOST = localhost >> .env
          echo DBDATABASEWEB = ${{ secrets.ENV_DBDATABASEWEB }} >> .env
          echo DBDATABASEiOS = ${{ secrets.ENV_DBDATABASEiOS }} >> .env
          echo SALTROUNDS = ${{ secrets.ENV_SALTROUNDS }} >> .env
          echo ENCRYPTIONKEY = ${{ secrets.ENV_ENCRYPTIONKEY }} >> .env
          echo SECRETKEYNAME = ${{ secrets.ENV_SECRETKEYNAME }} >> .env
          echo SECRETKEYALGORITHM = ${{ secrets.ENV_SECRETKEYALGORITHM }} >> .env
          echo SECRETKEYLABEL = ${{ secrets.ENV_SECRETKEYLABEL }} >> .env
          echo RECAPTCHAKEY = ${{ secrets.ENV_RECAPTCHAKEY }} >> .env
          echo EMAILURL = ${{ secrets.ENV_EMAILURL }} >> .env
          echo EMAILACCESSKEY = ${{ secrets.ENV_EMAILACCESSKEY }} >> .env
          echo EMAILSECRETKEY = ${{ secrets.ENV_EMAILSECRETKEY }} >> .env
          echo SESSIONKEY = ${{ secrets.ENV_SESSIONKEY }} >> .env
          cat .env

      - name: Deploy to Express Server
        uses: burnett01/[email protected]
        with:
          switches: -avzr --delete-after
          path: WEB/BE/
          remote_path: ~/TOTP/
          remote_host: ${{ secrets.BE_HOST }}
          remote_user: ${{ secrets.BE_USERNAME }}
          remote_key: ${{ secrets.BE_KEY }}
          remote_port: ${{ secrets.BE_PORT }}

      - name: Restart Forever
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.BE_HOST }}
          username: ${{ secrets.BE_USERNAME }}
          key: ${{ secrets.BE_KEY }}
          port: ${{ secrets.BE_PORT }}
          script: forever restartall

      - name: Slack Notification
        uses: rtCamp/action-slack-notify@v2
        env:
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          SLACK_USERNAME: 'DDIS Bot'
  1. ์„ค์ •๋œ ๋ธŒ๋žœ์น˜์— push๋˜๋ฉด Actions ํƒญ์—์„œ job์ด ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ ํ™•์ธ image

๋А๋‚€์ 

  • Travis๋ž‘ ์„ค์ •ํ•˜๋Š”๊ฒŒ ๋น„์Šทํ•ด์„œ ์ „๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค
  • ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ action์„ ์ฝ”๋“œ ํ•œ ์ค„๋กœ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์–ด์„œ ํŽธํ•˜๋‹ค!
    • ssh์—ฐ๊ฒฐ๊ฐ™์€ ๊ท€์ฐฎ์€ ์ž‘์—…์„ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค ๐Ÿ‘
  • ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์•ˆ์—์„œ ๋‹ค ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€๋“ฏ