CI CD - connect-foundation/2019-12 GitHub Wiki
CI
Travis CI๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ํ๋ค.
Test ๊ตฌ์ฑ
FrontEnd
- Feature => client-develop [PR]
๊ฐ๊ฐ์ ๊ธฐ๋ฅ ๋ธ๋์น์์ ๊ฐ๋ฐ ๋ธ๋์น๋ก PR์ด ์ผ์ด๋๋ฉด feature ๋ธ๋์น์์ CI๊ฐ ๋ฐ์
- (Jest, Enzyme) ์ปดํฌ๋ํธ ๋จ์/ํตํฉ ํ ์คํธ
- (Cypress) Storybook์์ ์์ฑํ ์ปดํฌ๋ํธ์ ๋ํ E2E ํ ์คํธ
- client-develop => client-master [PR] && Feature => client-develop [Merge]
- (Cypress) Storybook์์ ๊ฐ ์ปดํฌ๋ํธ์ ๋ํ E2E ํ ์คํธ
- (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