소개
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 | None |
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 | None |
단계를 사용하여 작업 실행
Jenkins는 steps
stages
에서 함께 그룹화합니다. 각 단계는 스크립트, 함수 또는 명령일 수 있습니다. 마찬가지로 GitHub Actions는 jobs
를 사용하여 steps
의 특정 그룹을 실행합니다.
Jenkins | GitHub Actions |
---|---|
steps | jobs.<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