2024. 1. 31. 20:11ㆍTIL
어젠 전반적인 CI/CD의 개념과 Docker를 다운받았다면
오늘은 강의를 따라서 깃허브에 내장돼 있는 CI/CD를 이용해보았다.
일단 어제 배운대로 CI/CD의 전체적인 흐름을 더 자세하게 풀어본다면
- 개발자는 feature/ 로 시작하는 브랜치를 만들어서 test코드를 포함한 수정 작업을 완료한 뒤 Pull Request 생성
- (자동화) Pull Request를 만들면 해당 브랜치에 대해 gradle test를 수행
- Pull Request 코드의 test가 실패한 경우, Pull Request 를 생성한 개발자는 test 코드를 수정하여 Pull Request를 변경
- Pull Request 코드의 test가 성공한 경우, 다른 개발자들의 승인을 기다림
- 다른 개발자들은 Pull Request의 코드를 승인하거나 댓글로 소통
- (자동화) main 브랜치에 merge 되면 해당 브랜치를 cloudtype 서버에 배포
그렇다면 깃허브의 action탭에서 확인이 가능한 CI/CD를 해보겠다.
우선 샘플용으로 프로젝트를 하나 만들어주고 develop 브랜치를 추가해줬다.
그리고 프로젝트 안에 .github/workflows 디렉토리 안에 run-test.yaml (*파일명은 상관없지만 파일위치, yaml 형태 는 꼭 지켜져야한다.)를 하나 만들어줬다.
그 뒤에 파일에는 이렇게 써줬다.
# Actions 이름 github 페이지에서 볼 수 있다.
name: Run Test
# Event Trigger 특정 액션 (Push, Pull_Request)등이 명시한 Branch에서 일어나면 동작을 수행한다.
on:
push:
# 배열로 여러 브랜치를 넣을 수 있다.
branches: [ develop, feature/* ]
# github pull request 생성시
pull_request:
branches:
- develop # -로 여러 브랜치를 명시하는 것도 가능
# 실제 어떤 작업을 실행할지에 대한 명시
jobs:
build:
# 스크립트 실행 환경 (OS)
# 배열로 선언시 개수 만큼 반복해서 실행한다. ( 예제 : 1번 실행)
runs-on: [ ubuntu-latest ]
# 실제 실행 스크립트
steps:
# uses는 github actions에서 제공하는 플러그인을 실행.(git checkout 실행)
- name: checkout
uses: actions/checkout@v4
# with은 plugin 파라미터 입니다. (java 17버전 셋업)
- name: java setup
uses: actions/setup-java@v2
with:
distribution: 'adopt' # See 'Supported distributions' for available options
java-version: '17'
- name: make executable gradlew
run: chmod +x ./gradlew
# run은 사용자 지정 스크립트 실행
- name: run unittest
run: |
./gradlew clean test
이 파일에서 CI/CD를 어떤식으로 실행할건지 정해놓는다. (어떤 시점에서, 어느 브랜치에, 어떤 작업을 할건지)
그 후에는 신기하게도 데브나 메인에 푸쉬, 풀리퀘를 날릴때마다 액션에서 새로운 탭들이 추가가 되었다.
심지어 테스트에 실패하면 직접 메일로 날라오기도 했다.
이후엔 CD도 자동화를 해야하는데
이 쪽 부분은 배포가 완전 첨이기도 해서 어려울줄 알았지만 꽤나 막힘없이 진행이 됐다.
우선 위쪽에서 추가해줬던 yaml 파일을 하나 더 만들어야한다.
name: Deploy to cloudtype
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Connect deploy key
uses: cloudtype-github-actions/connect@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
ghtoken: ${{ secrets.GHP_TOKEN }}
- name: Deploy
uses: cloudtype-github-actions/deploy@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: # 워크스페이스 이름/프로젝트 이름 ex) nbc.docker/cicd
stage: main
yaml: |
name: # 프로젝트 이름 ex) `cicd`
app: java@17
options:
ports: 8080
context:
git:
url: git@github.com:${{ github.repository }}.git
ref: ${{ github.ref }}
preset: java-springboot
그리고 CLOUDTYPE 이라는 배포용 사이트에도 회원가입을 해줘야한다.
이후엔 깃퍼스널 토큰, 클라우드타입토큰 등을 발급받고 깃 시크릿 쪽에 넣은뒤 (아마 내 토큰이 배포했을 때 다른사람에게 보이지 않도록 하는 용도인것 같다.)
클라우드에 있는 프로젝트 이름도 넣으면 자동으로 CD가 이루어져서 배포가 완료 된다.
오늘의 한마디 : 남은 날은 도커보단 코드 개선과제부터 해야겠다.
'TIL' 카테고리의 다른 글
20240202 (금) 개인 주특기 플러스 주차 4일차 (0) | 2024.02.02 |
---|---|
20240201 (목) 개인 주특기 플러스 주차 3일차 (0) | 2024.02.01 |
20240130 (화) 개인 주특기 플러스 주차 (1) | 2024.01.30 |
20240129 (월) BackOffice 프로젝트 발표 및 회고 (0) | 2024.01.29 |
20240126 (금) BackOffice 프로젝트 마무리 (0) | 2024.01.26 |