Skip to main content

Jenkins에서 GitHub Actions로 마이그레이션

GitHub Actions 및 Jenkins는 여러 유사성을 공유하므로 GitHub Actions로 마이그레이션하는 것이 비교적 간단합니다.

소개

Jenkins 및 GitHub Actions를 사용하면 코드를 자동으로 빌드, 테스트, 게시, 릴리스 및 배포하는 워크플로를 만들 수 있습니다. Jenkins 및 GitHub Actions는 워크플로 구성에서 몇 가지 유사점을 공유합니다.

  • Jenkins는 GitHub Actions 워크플로 파일과 유사한 _선언적 파이프라인_을 사용하여 워크플로를 만듭니다.
  • Jenkins는 _스테이지_를 사용하여 단계의 컬렉션을 실행하는 반면, GitHub Actions은(는) 작업을 사용하여 하나 이상의 단계 또는 개별 명령을 그룹화합니다.
  • Jenkins 및 GitHub Actions는 컨테이너 기반 빌드를 지원합니다. 자세한 내용은 "Docker 컨테이너 작업 만들기"을(를) 참조하세요.
  • 단계 또는 작업을 다시 사용하고 커뮤니티와 공유할 수 있습니다.

자세한 내용은 "GitHub Actions 이해"을 참조하세요.

주요 차이점

  • Jenkins에는 파이프라인을 만들기 위한 두 가지 유형의 구문인 선언적 파이프라인과 스크립팅된 파이프라인이 있습니다. GitHub Actions는 YAML을 사용하여 워크플로 및 구성 파일을 만듭니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.
  • Jenkins 배포는 일반적으로 자체 호스팅되며 사용자는 자체 데이터 센터에서 서버를 유지 관리합니다. GitHub Actions는 자체 호스팅 실행기를 지원하는 동시에, 작업을 실행하는 데 사용할 수 있는 자체 실행기를 호스팅하여 하이브리드 클라우드 접근 방식을 제공합니다. 자세한 내용은 자체 호스트형 실행기 정보을(를) 참조하세요.

기능 비교

빌드 배포

Jenkins를 통해 단일 빌드 에이전트에 빌드를 보내거나 여러 에이전트에 배포할 수 있습니다. 운영 체제 유형과 같은 다양한 특성에 따라 에이전트를 분류할 수도 있습니다.

마찬가지로 GitHub Actions는 GitHub 호스팅 또는 자체 호스팅 실행기로 작업을 보낼 수 있으며, 레이블을 사용하여 다양한 특성에 따라 실행기를 분류할 수 있습니다. 자세한 내용은 "GitHub Actions 이해" 및 "자체 호스트형 실행기 정보"을(를) 참조하세요.

섹션을 사용하여 파이프라인 구성

Jenkins는 선언적 파이프라인을 여러 섹션으로 분할합니다. 마찬가지로 GitHub Actions는 워크플로를 별도의 섹션으로 구성합니다. 아래 표에서는 Jenkins 섹션을 GitHub Actions 워크플로와 비교합니다.

Jenkins 지시문GitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
postNone
stagesjobs
stepsjobs.<job_id>.steps

Using 지시문

Jenkins는 지시문을 사용하여 _선언적 파이프라인_을 관리합니다. 지시문은 워크플로의 특성 및 실행 방법을 정의합니다. 아래 표에서는 이 지시문이 GitHub Actions의 개념에 매핑되는 방법을 보여 줍니다.

Jenkins 지시문GitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps[*].env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Jenkins cron syntax(Jenkins cron 구문)on.schedule
stagejobs.<job_id>
jobs.<job_id>.name
toolsGitHub 호스트형 실행기 사양
inputinputs
whenjobs.<job_id>.if

순차 스테이지 사용

병렬 작업 처리

Jenkins는 stagessteps를 병렬로 실행할 수 있지만 현재 GitHub Actions는 병렬로만 작업을 실행합니다.

Jenkins 병렬GitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

행렬

GitHub Actions 및 Jenkins 모두 매트릭스를 사용하여 다양한 시스템 조합을 정의할 수 있습니다.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesNone

단계를 사용하여 작업 실행

Jenkins는 steps stages에서 함께 그룹화합니다. 각 단계는 스크립트, 함수 또는 명령일 수 있습니다. 마찬가지로 GitHub Actions는 jobs를 사용하여 steps의 특정 그룹을 실행합니다.

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

일반 작업의 예

cron을 사용하여 실행할 파이프라인 예약

cron을(를) 사용한 Jenkins 파이프라인

pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}

cron을 사용하는 GitHub Actions 워크플로

on:
  schedule:
    - cron: '*/15 * * * 1-5'

파이프라인에서 환경 변수 구성

Jenkins 파이프라인과 환경 변수

pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}

환경 변수를 포함하는 GitHub Actions 워크플로

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

업스트림 프로젝트에서 빌드하기

업스트림 프로젝트에서 빌드되는 Jenkins 파이프라인

pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}

업스트림 프로젝트에서 빌드되는 GitHub Actions 워크플로

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

여러 운영 체제를 사용하여 빌드하기

여러 운영 체제로 빌드되는 Jenkins 파이프라인

pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-16" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}

여러 운영 체제를 사용하여 빌드되는 GitHub Actions 워크플로

name: demo-workflow
on:
  push:
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 16
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp