01. CI/CD란?
CI/CD
는 Continuous Integration, Continuous Deployment 의 약자로, 지속적 통합, 지속적 배포 라는 의미를 가진다.
- 지속적 통합은 여러 개발자들이 작성한 코드를 지속적으로 병합하며, 그 과정에서 발생할 수 있는 문제를 발견하는 테스트 과정을 포함한다.
- 지속적 배포는 개발된 코드를 실시간으로 운영 환경에 배포하는 과정을 이야기 한다.
- 예시로 여러명의 개발자들과 협업하는 경우를 생각해보자.
각 개발자들이 작성한 코드를 main branch에 병합하는 과정에서, 아마 높은 확률로 Conflict가 발생할 것이고, 이를 직접 검토하며 통합하는 적업은 꽤나 많은 시간을 소모할 것이다.
또한, 이렇게 작성된 코드를 배포하는 과정도 꽤나 복잡하다. 서버 PC에 접속 후, 작성된 코드를 다운 받고 다시 빌드하고 배포하고 잘 배포되는지 테스트.... 너무 번거롭다.
CI/CD
는 이러한 문제들을 해결하기 위해, 소스 코드를 통합 및 테스트하고, 배포하는 과정을 자동화 하는 개발 방법론을 의미한다.
02. GitHub Actions 사용해보기
🎈 GitHub Actions란?
GitHubActions
는 GitHub에서 제공하는 CI/CD(지속적 통합 및 배포) 도구이다.
GitHub Actions 이외에도 Jenkins
등의 여러 도구가 존재하지만, 해당 글에서는 GitHub Actions를 사용해 진행하도록 하겠다.
GitHub Actions의 장점은 아래와 같다.
- GitHub와의 연계: GitHub와 연계되어서, 별도의 서비스나 도구 없이 GitHub를 통해 모든 작업을 수행 가능하다.
- 간편한 설정:
YAML
파일을 통해 간편하게 워크플로우를 설정할 수 있다. - 다양한 트리거:
commit
,push
,pull-requests
,issue
등 GitHub의 다양한 이벤트를 트리거로 설정할 수 있다. - 커뮤니티 : GitHub를 사용하는 사용자 층이 매우 많기 때문에, 여러 커뮤니티 등에서 쉽게 자문을 구할 수 있다.
🎈 GitHub Actions 설정
GitHub Actions를 설정하는 자세한 방법은 공식 문서를 참고하자
아래에서는 간단하게 사용 방법을 설명하겠다.
GitHub Repository
생성- Root 디렉토리에
.github/workflows/
디렉토리를 생성한다. - 임의의
yaml 파일을 생성한다.
- 아래의 코드를 작성한다.
# Workflow 이름
name: Github Action Start
# Workflow 실행 조건
# main 브랜치에 push 동작이 발생하면 workflow 실행
on:
push:
branches:
- main
# 하나의 workflow는 여러개의 job을 가짐
# job: 실행단위
# 하나 이상의 Job은 병렬적(동기적)으로 실행
jobs:
# Job 이름
My-Deploy-Job:
# 실행 환경(os)
# 우분투 최신버전에서 실행
runs-on: ubuntu-latest
# 하나의 Job은 여러개의 setp을 가짐
# Step: 특정 작업을 수행하는 가장 작은 단위
steps:
- name: Hello World 찍기
run: echo "Hello World"
- name: 여러 명령들 실행
run: |
echo "Good"
echo "Morning"
- name: Github Actions 안에 포함된 변수 사용
run: |
echo $GITHUB_SHA
echo $GITHUB_REPOSITORY
- 변경 사항을
push
한다.
위 작업을 수행 후, 해당 GitHub Repo 페이지에서, Actions 탭에 들어가면 아래와 같이 나온다.
Repository에 `push` 이벤트가 발생하자, `GitHub Actions`가 작동된 것을 확인했다.
그럼 어떻게 이런 실행 결과가 나온건지 확인해보자.
🎈 GitHub Actions 구조
위 그림은 GitHub Actions의 구조를 보여준다.
- GitHub Actions는 하나 이상의
워크플로우(workflows)
를 가진다.- 각 워크플로우는 이벤트(트리거)를 가진다. (ex: push, pull-req 등)
- 해당 이벤트가 발생하면, 워크플로우 안의 job들이 실행된다.
- 하나의 워크플로우는 여러개의 이벤트를 가질 수 있다.
- 하나의 워크플로우는 하나 이상의
Jobs
를 가진다.- 이때 각 Job들은 기본적으로는 병렬적(동시에, 동기적) 으로 실행된다.
- 하나의 Job은 하나 이상의
Steps
를 가진다.- Step은 GitHub Actions에서 가장 작은 실행 단위이다.
이와 같은 워크플로우, Job 들을 조합하여 개발자가 원하는대로 파이프라인을 구성할 수 있다.
이렇게 GitHub Actions 구조를 알면 위의 yaml 코드가 의미하는 내용이 뭔지 알 수 있다.
name
: 워크플로우 이름(하나의 yaml 파일은 하나의 워크플로우)on
: 이벤트(트리거) 설정on:push:branches:-main
: main 브랜치에 push가 발생하면 실행
jobs
: 워크플로우가 포함하는 job들 정의jobs:<job이름>:runs-on
: 작업을 수행할 PC 환경 정의
jobs:steps
: steps 정의jobs:steps:-name
: step의 이름 설정jobs:steps:run
: 작업할 내용 정의
Referenct
'Back End > 서버 지식' 카테고리의 다른 글
IP 주소와 서브넷 마스크 개념 (3) | 2024.10.10 |
---|---|
SSH의 개념과 통신 과정 (0) | 2024.09.21 |
대칭키와 비대칭키 (0) | 2024.09.21 |
컨테이너(Container)와 도커(Docker)의 개념 (1) | 2024.09.20 |