본문 바로가기

CI/CD

[CI/CD] Github Actions과 Jenkins 차이

 

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 파이프라인과 필요한 기능들을 잘 고려해 적절한 도구를 선택해야한다.

 

 

 

 

 

 

 

 

참고

https://nanbuja.com/entry/CICD-Jenkins-%EA%B3%BC-GitHub-Action%EC%9D%98-%EA%B0%9C%EB%85%90-%EC%B0%A8%EC%9D%B4%EC%A0%90

https://velog.io/@kimseungki94/Jenkins-vs-Github-Action-%EC%96%B4%EB%96%A4%EA%B1%B8-%EC%93%B0%EB%8A%94%EA%B2%8C-%EC%A2%8B%EC%9D%84%EA%B9%8C

'CI/CD' 카테고리의 다른 글

[CI/CD] Github Actions & Docker를 활용한 배포 자동화 - 1  (2) 2024.05.24