Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

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

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

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

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
post
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
excludes

단계를 사용하여 작업 실행

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

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

일반 작업의 예

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

Jenkins 파이프라인 GitHub Actions 워크플로
pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}
on:
  schedule:
    - cron: '*/15 * * * 1-5'

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

Jenkins 파이프라인 GitHub Actions 워크플로
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

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

Jenkins 파이프라인 GitHub Actions 워크플로
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

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

Jenkins 파이프라인 GitHub Actions 워크플로
pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-12" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}
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@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp