참고: 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 |
---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | 없음 |
stages | jobs |
steps | jobs.<job_id>.steps |
Using 지시문
Jenkins는 지시문을 사용하여 선언적 파이프라인을 관리합니다. 지시문은 워크플로의 특성 및 실행 방법을 정의합니다. 아래 표에서는 이 지시문이 GitHub Actions의 개념에 매핑되는 방법을 보여 줍니다.
순차 스테이지 사용
병렬 작업 처리
Jenkins는 stages
및 steps
를 병렬로 실행할 수 있지만 현재 GitHub Actions는 병렬로만 작업을 실행합니다.
Jenkins 병렬 | GitHub Actions |
---|---|
parallel | jobs.<job_id>.strategy.max-parallel |
행렬
GitHub Actions 및 Jenkins 모두 매트릭스를 사용하여 다양한 시스템 조합을 정의할 수 있습니다.
Jenkins | GitHub Actions |
---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes | 없음 |
단계를 사용하여 작업 실행
Jenkins는 steps
stages
에서 함께 그룹화합니다. 각 단계는 스크립트, 함수 또는 명령일 수 있습니다. 마찬가지로 GitHub Actions는 jobs
를 사용하여 steps
의 특정 그룹을 실행합니다.
Jenkins | GitHub Actions |
---|---|
steps | jobs.<job_id>.steps |
일반 작업의 예
cron
을 사용하여 실행할 파이프라인 예약
Jenkins 파이프라인 cron
pipeline {
agent any
triggers {
cron('H/15 * * * 1-5')
}
}
GitHub Actions 워크플로 cron
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-12" }
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@v2
- uses: actions/setup-node@v2
with:
node-version: 12
- run: npm install -g bats
- run: bats tests
working-directory: scripts/myapp