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는 작업 실행에 사용할 수 있는 자체 러너를 제공하는 동시에 self-hosted 러너도 지원하여 하이브리드 클라우드 방식을 제공합니다. 자세한 내용은 자체 호스팅 실행기을(를) 참조하세요.

기능 비교

빌드 배포

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
tools
[
GitHub-호스팅 러너의 사양](/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software)
inputinputs
whenjobs.<job_id>.if

순차 스테이지 사용

병렬 작업 처리

Jenkins는 병렬로 stages``steps 실행할 수 있습니다. GitHub Actions 는 작업을 병렬로 실행하고 단계 수준 구문을 사용하여 작업 내에서 동시에 단계를 실행할 수도 있습니다. 자세한 내용은 GitHub Actions에 대한 워크플로 구문을 참조하세요.

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

행렬

둘 다 GitHub Actions 와 Jenkins를 사용하면 행렬을 사용하여 다양한 시스템 조합을 정의할 수 있습니다.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesNone

단계를 사용하여 작업 실행

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

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

일반 작업의 예

cron을 사용하여 파이프라인을 실행하도록 예약하기

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

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

GitHub Actionscron을 사용하는 워크플로

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

schedule 이벤트 및 허용되는 Cron 구문에 대한 자세한 내용은 워크플로를 트리거하는 이벤트을(를) 참조하세요.

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

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-20" }
            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@v6
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp