카테고리 없음

Jenkins vs Github Actions

해갈 2023. 11. 29. 21:58

Jenkins

  • 무료 오픈 소스
  • 서버 설치가 필요
  • 레퍼런스가 많은 안정적인 툴
  • 다양한 플러그인으로 커스터마이징 가능
  • 각 단계를 동기적으로 실행

 

 

Github Actions

  • Github 와 연동
  • 클라우드 환경에서 작동해 설치가 필요 없음
  • Runners 라는 VM(Virtual Machine) 환경에서 실행
  • Self-hosted Runner 직접 구동 가능
  • Workflow 를 .yml 소스코드로 관리

 

둘 중 깃허브 액션을 선택한 이유는 서버 설치가 필요 없다는 것과 '적용하기 쉽다' 라는 장점이 매력적이어서 깃허브 액션을 선택하게 되었습니다.

 

깃허브 액션에 대해

GitHub Actions 는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI / CD 플랫폼입니다. repository 에 대한 모든 pull requests 를 빌드 및 테스트하는 workflow 를 생성하거나 병합된 pull request 를 프로덕션에 배포할 수 있습니다.

깃허브 액션스는 단순한 DevOps 를 넘어 repository 에서 다른 이벤트가 발생할 때 workflow 를 실행할 수 있도록 합니다. 예를 들어, 누군가가 저장소에 새로운 이슈를 생성할 때마다 적절한 레이블을 자동으로 추가하는 workflow 를 실행할 수 있죠.

적용방법은 깃허브 레퍼지토리에 .github 디렉토리 하위에 있는 workflows 디렉토리에 .yml 파일을 두게 되면 해당 파일이 Workflow 로 설정이 되게 됩니다.

 

Workflow 

Workflow 는 하나 이상의 job 으로 구성되고, event 에 의해 트리거될 수 있는 자동화된 프로세스입니다. 가장 최상위 개념으로 YAML 으로 작성되고, Github Repository 의 .github/workflows 폴더 아래에 저장합니다. respository 에는 여러 workflow 를 가질 수 있으며 각 workflow 는 서로 다른 작업을 수행할 수 있습니다. 

pull request 가 열리거나 생성되는 것과 같은 이벤트가 reoistory 에서 발생할 때, 트리거되도록 GitHub workflow 를 구성할 수 있습니다.  

Workflow 의 구성은 다음과 같습니다.

github actions workflow

workflow 에는 순차적으로 또는 병렬로 실행할 수 있는 하나 이상의 job 이 포함되어 있습니다. 각 job 은 자체 가상 머신 runner 내부 또는 컨테이너 내부에서 실행되며, 사용자가 정의한 스크립트를 실행하거나 job 을 실행하는 하나 이상의 단계(workflow 를 단순화할 수 있는 재사용 가능한 확장) 가 있습니다.

 

event

  • event 는 workflow 를 트리거하는 역할을 하게 되고, 특정 대상에게 특정 이벤트가 발생할 때, 해당 "workflow 를 실행하겠다" 라는 의미를 가집니다.
nameL CI/CD pipeline

on:
  push:
	branches:
      - main
      - dev
  pull_requests:
    branches:
      - main
      - dev

위 예시에서 main 브랜치와 dev 브랜치에 push 혹은 pull requsets 가 있을 때, 해당 workflow 를 실행하겠다는 의미입니다.

 

job

  • job 은 workflow 에서 컨테이너 단위를 말합니다.
  • 각 job 들은 병렬적으로 실행이 됩니다.
  • 각 job 들의 순서 또한 설정할 수 있습니다.
  • 작업될 환경인 Virtual Machine 을 설정할 수 있습니다.
jobs:
  build_test:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: demo

위 예시의 job 은 빌드와 테스트를 하겠다는 이름을 갖고 있고, "job 을 실행시키는 환경은 우분투의 최신버전이다" 라는 의미입니다.

 

 

steps

  • job 내에서 어떤 것을 실행할 지에 대한 내용을 정의합니다.
  • step 은 이미 깃허브 액션에서 정해높은 액션을 실행시키거나 혹은 명령어를 실행시킬 수 있습니다.
steps:
- uses: actions/checkout@v2

- name: JDK 11 세딩
  uses: actions/setup-java@v2
  with:
    java-version: '11'
    distributton: 'adopt'
    
- name: 그래들 래퍼 실행 권한
  run: chmod +x gradlew build
  
- name: 단위테스트, 통합 테스트
  run: ./gradlew test

JAVA11 을 세팅한다거나 혹은 gradle 로 빌드를 한다거나 gradle 테스트를 하는 명령어를 실행시킵니다.

 

 

GitHub Actions 플로우

  • 개발자가 공톨 repository 에 PR 을 보내면, 만약 PR 을 어떤 깃허브 액션에서 트리거로 설정해 놓게 되면, PR 이 트리거가 돼서 테스트를 수행하게 됩니다.
  • 이 PR 은 테스가 통과된 PR 이라는 것이 확인이 되면, PR 이 정상적으로 진행됩니다.
  • 리뷰어가 리뷰를 마치고, PR 이 merge 가 되면, "공통 repository 에 push 가 변경사항이 있다(트리거가 된)" 라고 생각이 들면, merge 결과에 대해서 빌드와 테스트까지 진행하게 됩니다.
  • 테스트도 마치게 되면, 다음 단계로 배포하게 됩니다.