Github Action과 Jenkins의 차이
Github Actions | vs | Jenkins |
젠킨스에 비해 최근에 나와 참고자료가 적음 CI/CD를 구성하기 쉬움 |
참고할 자료가 많음 CI/CD를 구성하는 게 어려움 |
Github Actions
Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 활 수 있는 도구이다. 즉 Github에서 직접 제공하는 CI/CD 도구라고 할 수 있다. Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있다.
Workflow는 Runners라 불리는 Github에서 호스팅 하는 Linux, macOS, Windows 환경에서 실행된다. 그리고 이 Runners를 사용자가 직접 호스팅하는 환경에서 직접 구동시킬 수도 있다.
Github 마켓 플레이스에서 여러 사람이 공유한 Workflow를 찾을 수 있으며 자신이 직접 만들어 공유할 수도 있다.
사용료는 public 저장소에서는 무료, private 저장소는 해당 계정에 부여된 무료 사용량 이후 과금이 발생하며 계정의 비공개 저장소를 기준으로 한 달에 500MB 스토리지와 실행 시간 2,000분까지 제공된다.
Github Actions의 장점
- 기존의 Circle CI / Travis CI / Jenkins CI 와 같은 서비스 또는 설치형 CI 처럼 Github에서도 Actions라는 CI툴을 선보여 별다른 복잡한 절차 없이 Github를 통해 사용 가능
- 워크 플로우 복제 용이
- Github와 통합
- 라이브 로그
- 다중 컨테이너 테스트 가능
- 리눅스, 맥, 윈도우, ARM 및 컨테이너를 쉽게 빌드, 테스트 가능
- 여러 운영체제 및 런타임 버전에서 동시 테스트 가능
- 모든 언어 어플리케이션 빌드, 테스트 및 배포 가
Github Actions의 단점
Jenkins
거의 모든 언어의 조합과 소스코드 레포지토리에 대한 CI/CD를 무료로 제공한다. 또한 일상적인 개발 작업을 자동화할 뿐 아닌 파이프라인을 사용해 거의 모든 언어의 조합과 소스코드 레포지토리에 대한 지속적인 통합과 지속적인 전달 환경을 구축하기 위한 간단한 방법을 제공한다.
주요 운용체제용 자바 8 WAR 아카이브와 설치 패키지, 홈브루 패키지, 도커 이미지, 소스코드 형태로 사용할 수 있다. 소스코드 대부분 자바이며 몇 개의 그루브, 루비, 앤틀러 파일이 들어있다. 젠킨스를 실행하면 웹 화면을 생성하며 REST API 호출로 구동된다.
Jenkins의 장점
- 프로젝트의 표준 컴파일 환경에서 컴파일 오류 검출
- 자동화 테스트 수행
- 코딩 규약 준수여부 체크
- 프로파일링을 통해 소스 변경에 따른 성능의 변화 감시
- 테스트 환경에 대한 배포작업
- 개발 업무를 도와주는 많은 플러그인을 가지고 있음
- Jenkins 파이브라인을 한 곳에서 관리할 수 있음.
- UI 면에서 관리하는 것이 Github Actions보다 편함.
Github Actions YAML
name: Backend Build and Push
on:
push:
branches:
- 08-cicd
paths:
- 'leafy-backend/**'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: 리포지토리 체크아웃
uses: actions/checkout@v2
- name: Docker Buildx 설정
uses: docker/setup-buildx-action@v1
- name: Docker Hub 로그인
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 이미지 빌드 및 푸시
uses: docker/build-push-action@v2
with:
context: ./leafy-backend
file: ./leafy-backend/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/leafy-backend:${{ github.sha }}
Jenkins Pipeline
pipeline {
agent { label 'ubuntu' }
environment {
DOCKERHUB_USERNAME = credentials('dockerhub-username')
DOCKERHUB_TOKEN = credentials('dockerhub-token')
}
stages {
stage('리포지토리 체크아웃') {
steps {
git branch: '08-cicd', url: 'https://github.com/your-repo/your-project.git'
}
}
stage('Docker Buildx 설정') {
steps {
sh 'docker buildx create --use'
}
}
stage('Docker Hub 로그인') {
steps {
script {
sh "echo ${DOCKERHUB_TOKEN} | docker login -u ${DOCKERHUB_USERNAME} --password-stdin"
}
}
}
stage('이미지 빌드 및 푸시') {
steps {
script {
def dockerImage = "${env.DOCKERHUB_USERNAME}/leafy-backend:${env.GIT_COMMIT}"
sh "docker build -t ${dockerImage} ./leafy-backend -f ./leafy-backend/Dockerfile"
sh "docker push ${dockerImage}"
}
}
}
}
post {
always {
cleanWs()
}
}
}
동일한 기능을 수행하는 Github Actions AYML과 Jenkins Pipeline이다.
CI/CD의 가독성과 구성 면에서 Github Action AYML이 더 쉬워보이는 큰 장점이 있다.
정리
Github Actions와 Jenkins 둘 다 강점이 있지만 어떤 것을 사용하는 것이 더 나은지는 사용하려는 파이프라인 설계와 필요한 기능들에 따라 달라진다. Jenkins는 자유도와 유연성이 더 높지만 Github Action은 설정이 더 간편하다.
따라서 여러 서버를 구성하고 관리해야하는 측면에서는 Jenkins를 사용하는 것이 제공하는 기술과 라이브러리, 일부 데이터들을 여러 파이프라인에서 공유할 수 있는 장점이 있어 대규모 시스템엔 Jenkins가, 서버가 한 대만 있고 배포를 빠르게 해야한다면 Github Actions를 사용하는 것이 좋을 수도 있다는 생각이다.
따라서 본인이 구축하려는 CI/CD 파이프라인과 필요한 기능들을 잘 고려해 적절한 도구를 선택해야한다.
참고
'CI/CD' 카테고리의 다른 글
[CI/CD] Github Actions & Docker를 활용한 배포 자동화 - 1 (2) | 2024.05.24 |
---|