앞 선 글들을 통하여 CI/CD 를 구축하기전 준비로 앱을 실행시킬 서버와 뒤에 받쳐줄 DB 와 캐싱 까지 구축 그리고 개발 서버에 맞는 application.yml 설정까지 맞췄다. 이로인해 배포를 하게 되면 서버에서 앱을 동작할 수 있는 단계 까지 왔다.
이제는 그럼 CI/CD를 구축할 차례가 되었다.
이 글들을 쓸때부터 CI/CD란 것을 구축하기위해 이러한 글들을 써온 것인데 그러하면 CI/CD란 무엇인가?
CI/CD란
Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미
기본 개념
지속적인 통합(Continuous Integration) :
- 코드의 지속적인 통합
- 자동화된 빌드와 자동화된 테스트를 제공
- 안정적인 코드를 빠르게 제공할 수 있는 밑거름
지속적인 서비스 제공(Continuous Delivery)
지속적인 배포(Continuous Deployment)
- 배포를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공
단계
- 코드 작성: 개발자들은 소스 코드를 작성하고 저장소(repository)에 업로드
- 빌드: 저장소에서 최신 소스 코드를 가져와 빌드를 수행. 빌드는 소스 코드를 컴파일하고, 라이브러리를 추가하고, 필요한 파일을 생성하는 과정.
- 테스트: 빌드된 결과물을 대상으로 테스트를 수행. 테스트는 기능이 정상적으로 작동하는지 확인하고, 버그를 발견하고 수정하는 과정.
- 배포: 테스트를 통과한 결과물을 배포. 배포는 서버에 업로드하거나, 사용자에게 제공하는 과정
이러한 CI/CD의 기본 개념을 알고 여러 CI/CD 툴 중에 github actions이라는 것을 선택하게 되었다.
Github Actions는
github에 내장된 CI/CD 도구로
github과 통합이 쉽고, CI/CD 서버가 내장 되어 따로 서버를 구축할 필요가 없으며 일정 수준까지 무료라는 것이다
무료 버전은 스토리지 500mb, 월 2000분을 지원하고
Github Actions 동작 방법 또한
repository의 .github/workflows 디렉토리에 필요한 Actions 파일들을 yaml 형식으로 작성을 하면 된다.
작성된 actions 파일들을 github에서 자동으로 실행으로 끝이므로
초보자라도 이렇게 좋은 조건과 빠른 접근성으로 github actions를 선택을 안할 이유가 없었다.
Github Actions 의 구조에 대해 한번 알아 보겠다.
- Workflow
- 최상위 개념
- 여러 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스
- Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장됨
- event
- Github Repository에서 발생하는 push, pull request open, issue open, 특정 시간대 반복(cron) 등의 특정한 규칙
- workflow 를 실행(trigger)함
- runner
- Github Action Runner app이 설치된 VM
- Workflow가 실행될 instance로, 각각의 Job 들은 개별적인 runner에서 실행
- job
- 하나의 runner에서 실행될 여러 step의 모음을 의미
- step
- 실행 가능한 하나의 shell script 또는 action
- Actions
- Workflow의 가장 작은 단위로 재사용이 가능
- Job을 만들기 위해 Step들을 연결
이제 한 예제를 통해 workflow 를 알아보겠다.
name: GitHub Actions Demo
on: [push]
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
name
- github actions의 이름을 정하는 부분.
on
action이 언제 실행되는 지에 대한 부분
jobs
- 실제 실행할 내용에 대한 부분들로
- runs -on: 어떤 환경에서 실행하는지 기술
- steps : 실제 실행에 표시될 이름
- name: 실행에 표시될 이름
- users: 여러가지 플러그인 사용
- 다양한 action들을 사용 - https://github.com/marketplace?type=actions
🎉 The job was automatically triggered by a push event.
🐧 This job is now running on a ubuntu-latest server hosted by GitHub!
🔎 The name of your branch is 너의 브랜치 and your repository is 실제 사용자 레포지.
💡 The 실제 사용자 레포지 repository has been cloned to the runner.
🖥️ The workflow is now ready to test your code on the runner.
(리포지토리에 있는 파일 목록)
🍏 This job's status is completed.
이런 결과를 보여준다.
- github.event_name: 이벤트의 이름을 나타냅니다. 예를 들어, 푸시 이벤트인 경우 "push"입니다.
- runner.os: GitHub에서 호스팅되는 서버의 운영 체제를 나타냅니다. 이 워크플로우에서는 "ubuntu-latest"를 사용합니다.
- github.ref: 브랜치의 이름을 나타냅니다.
- github.repository: 레포지토리의 이름을 나타냅니다.
- github.workspace: 작업 공간 디렉토리의 경로를 나타냅니다.
다음에는 이러한 깃 액션 워크플로우를 통하여 CI를 구현해보려고한다.
'내일배움캠프' 카테고리의 다른 글
내일배움캠프 최종 프로젝트 - applicaton.yml 관리 submodules 사용 (0) | 2024.04.11 |
---|---|
내일 배움 캠프 최종 프로젝트 - 스프링부트 서버를 컨테이너로 올리기 전 준비(도커 설치) (0) | 2024.04.11 |
내일 배움 캠프 최종 프로젝트 - GCP VM mobaXterm 접속 (0) | 2024.04.10 |
내일 배움 캠프 최종 프로젝트 - CI/CD 설계 전 서버 구축(GCP Computing engine) (0) | 2024.04.09 |
내일배움캠프 최종프로젝트 - 캐싱 적용-1 (0) | 2024.04.04 |