CI CD - connect-foundation/2019-12 GitHub Wiki

CI

Travis CI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค.

Test ๊ตฌ์„ฑ

FrontEnd

  • Feature => client-develop [PR]

๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜๋กœ PR์ด ์ผ์–ด๋‚˜๋ฉด feature ๋ธŒ๋žœ์น˜์—์„œ CI๊ฐ€ ๋ฐœ์ƒ

  1. (Jest, Enzyme) ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
  2. (Cypress) Storybook์—์„œ ์ž‘์„ฑํ•œ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ E2E ํ…Œ์ŠคํŠธ
  • client-develop => client-master [PR] && Feature => client-develop [Merge]
  1. (Cypress) Storybook์—์„œ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ E2E ํ…Œ์ŠคํŠธ
  2. (Cypress) ์‹ค์ œ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ E2E ํ…Œ์ŠคํŠธ
  • client-develop => client-master [Merge]

PR ๊ณผ์ •๊ณผ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ, Deploy ๊ณผ์ •์„ ํฌํ•จ

BackEnd

  • Feature => server-develop [PR, Merge] && server-develop => server-master [PR]

(Jest, Supertest) Middleware, Controller ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

  • server-develop => server-master [Merge]

PR ๊ณผ์ •๊ณผ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ, Deploy ๊ณผ์ •์„ ํฌํ•จ

Envs

Travis ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์ž„ ํ˜„์žฌ๊นŒ์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง

  • IMAGE_NAME=test
  • IMAGE_TAG=0.0.1
  • DOCKER_USER=jdd04026
  • secure - DOCKER_PASS

Image ์— ๋Œ€ํ•œ ๊ฐ’๋“ค์€ ์„œ๋ฒ„ deploy ์‹œ์— ์‚ฌ์šฉํ•  docker image tag์ž„.

Jobs

Jobs๋Š” include ๋œ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ Stage์˜ ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ค„์ง.

  • Feature => Develop [PR]

head branch๊ฐ€ develop์ผ ๊ฒฝ์šฐ (develop ์œผ๋กœ PR์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ) ๋ฐœ์ƒํ•˜๋Š”

    - stage: "Server Feature"
      if: head_branch = server-develop
      before_script:
        - docker build -t "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}" ./server
      script:
        - echo "$DOCKER_USER"
        - docker images
        - docker run -it "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}" npm run test
  • Develop => Master [PR] && Feature => Develop [Merge]

branch๊ฐ€ develop, master ๋‘˜์ค‘ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ ์ผ์–ด๋‚จ

    - stage: "Server Deploy"
      if: branch = server-develop OR branch = server-master
      before_script:
        - docker build -t "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}" ./server
      script:
        - echo "$DOCKER_USER"
        - docker images
        - docker run -it "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}" npm run test
  • Develop => Master [Merge]

์•„๋ž˜์˜ ๊ณผ์ •์€ branch ๊ฐ€ master ์ผ ๊ฒฝ์šฐ (master๋กœ push๊ฐ€ ์ด๋ค„์ง€๋ฉฐ merge ๊ฐ€ ์ด๋ค„์ง€๋Š” ์ƒํ™ฉ) Deploy ๊ณผ์ • Develop => Master [PR] ์˜ ๊ณผ์ •์— ์ด์–ด์„œ ์ผ์–ด๋‚จ.

      deploy:
        provider: script
        script: 
          - echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin;
          - docker tag "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}" "${DOCKER_USER}/${IMAGE_NAME}:latest"
          - docker push "${DOCKER_USER}/${IMAGE_NAME}:latest" && docker push "${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}"
        on:
          branch: server-master