Jenkins와 Git, GitHub, GitLab 연동
6️⃣ Jenkins와 Git, GitHub, GitLab 연동
1. Jenkins와 Git 저장소 연동
Jenkins는 Git을 지원하여, Git 저장소의 소스 코드를 자동으로 가져와 빌드 및 배포를 실행할 수 있습니다. Jenkins와 Git 연동을 통해 코드 변경 사항을 추적하고, 실시간으로 빌드와 테스트가 가능합니다.
1.1. Git 연동 설정 방법
- Jenkins 설치 후 Git 플러그인 설치: 먼저 Jenkins에 Git 플러그인을 설치해야 합니다.
- Git 저장소 URL 설정: Jenkins에서 Job을 생성한 후, Git 저장소의 URL을 입력하여 소스 코드를 가져옵니다.
- 인증 관리: SSH 키나 사용자 인증 정보를 설정하여, Git 서버와 연결할 수 있도록 합니다.
git 'https://github.com/yourusername/yourrepository.git'
그림: Jenkins에서 Git 연동 설정 화면
2. GitHub Webhook을 이용한 자동 빌드
GitHub Webhook은 GitHub 저장소에서 코드가 푸시될 때 자동으로 Jenkins에서 빌드를 트리거할 수 있게 해주는 기능입니다. 이를 통해 개발자는 GitHub에 커밋을 푸시할 때마다 자동으로 Jenkins 빌드를 실행할 수 있습니다.
2.1. GitHub Webhook 설정 방법
- Jenkins에 GitHub Plugin 설치: 먼저 GitHub 플러그인을 설치합니다.
- Jenkins Job 설정:
- GitHub Webhook을 사용하려면
GitHub
프로젝트와 연결된 Jenkins Job을 만들어야 합니다. - 빌드 트리거를
GitHub hook trigger for GITScm polling
으로 설정합니다.
- GitHub Webhook을 사용하려면
- GitHub Webhook 설정:
- GitHub에서 리포지토리의
Settings
->Webhooks
로 이동 후, Jenkins URL을 입력하고 Webhook을 추가합니다.
- GitHub에서 리포지토리의
예시: GitHub Webhook 설정
triggers {
githubPush()
}
그림: GitHub Webhook 설정 화면
3. GitLab CI/CD와 비교
GitLab CI/CD와 Jenkins는 모두 CI/CD 도구이지만, 그 사용 방식에는 차이가 있습니다. GitLab CI/CD는 GitLab 자체 내장 기능으로 제공되며, Jenkins는 외부 도구로 설치해야 합니다. 두 도구 모두 유사한 기능을 제공하지만, Jenkins는 플러그인 확장성을 통해 다양한 시스템과 연동할 수 있다는 장점이 있습니다.
3.1. 차이점
- 설치 및 설정: Jenkins는 독립적인 서버에서 운영되며, GitLab CI/CD는 GitLab 내부에 포함되어 있어 설정이 간편합니다.
- 플러그인: Jenkins는 수많은 플러그인으로 기능을 확장할 수 있습니다.
- UI/UX: GitLab CI/CD는 GitLab UI와 통합되어 있어 일관된 경험을 제공합니다. Jenkins는 별도의 UI를 제공하여 다양한 설정을 할 수 있습니다.
예시: GitLab CI/CD 설정
stages:
- build
- test
- deploy
build:
script:
- echo "Building..."
test:
script:
- echo "Testing..."
deploy:
script:
- echo "Deploying..."
4. Branch 기반 자동화 (Multi-branch Pipeline)
Jenkins는 Multi-branch Pipeline을 사용하여 여러 Git 브랜치에 대해 자동으로 파이프라인을 실행할 수 있습니다. 이는 브랜치마다 다른 파이프라인을 설정할 수 있게 해주며, 특히 GitHub나 GitLab에서 여러 브랜치를 다루는 프로젝트에 유용합니다.
4.1. Multi-branch Pipeline 설정
- Multi-branch Pipeline Job 생성: Jenkins에서 새로운 Multi-branch Pipeline Job을 생성합니다.
- Git 저장소 연결: GitHub나 GitLab 리포지토리와 연결합니다.
- Branch Discovery 설정: 각 브랜치에 대해 자동으로 파이프라인을 생성하고 실행합니다.
multibranchPipelineJob('My-Repo') {
branchSources {
git {
id('my-repo-id')
remote('https://github.com/yourusername/yourrepository.git')
credentialsId('your-credentials-id')
}
}
}
그림: Multi-branch Pipeline 설정 화면
5. Git Tag, Pull Request 트리거 설정
Git에서는 Git Tag와 **Pull Request(PR)**를 트리거로 사용하여 빌드를 실행할 수 있습니다. Jenkins는 특정 태그가 푸시되거나 PR이 생성될 때 빌드를 실행하도록 설정할 수 있습니다.
5.1. Git Tag 트리거
triggers {
gitTagPush('v*')
}
5.2. PR 트리거
GitHub와 GitLab에서 PR이 열리거나 수정될 때 Jenkins에서 자동으로 빌드를 트리거할 수 있습니다. 이를 위해 GitHub Pull Request Builder Plugin이나 GitLab CI Plugin을 사용합니다.
6. GitHub Actions vs Jenkins 비교
GitHub Actions와 Jenkins는 모두 CI/CD 도구이지만, 사용 방식과 장점이 다릅니다.
6.1. 차이점
- 설정 용이성: GitHub Actions는 GitHub 내에서 바로 설정할 수 있으며, 별도의 서버가 필요 없습니다. Jenkins는 별도로 설치하고 구성해야 합니다.
- 플러그인: Jenkins는 다양한 플러그인을 통해 기능을 확장할 수 있지만, GitHub Actions는 GitHub 환경 내에서만 동작합니다.
- UI/UX: GitHub Actions는 GitHub UI와 통합되어 있어 GitHub 사용자에게 더 직관적인 경험을 제공합니다.
예시: GitHub Actions Workflow
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Run build
run: ./build.sh
7. Jenkins Credentials를 이용한 Git 인증 관리
Jenkins에서는 Git 인증을 위해 Jenkins Credentials를 사용하여 인증 정보를 안전하게 관리할 수 있습니다. 이를 통해 SSH 키나 사용자 이름과 비밀번호를 안전하게 저장하고, Jenkins Job에서 사용할 수 있습니다.
7.1. Jenkins Credentials 설정 방법
- Jenkins 대시보드에서
Manage Jenkins
->Manage Credentials
로 이동합니다. - Git 저장소 인증 정보 추가: SSH 키나 사용자 이름/비밀번호 등을 입력하여 Git 인증 정보를 저장합니다.
- Job에서 인증 정보 사용: Jenkinsfile이나 Job 설정에서 이 인증 정보를 참조하여 Git과 연결합니다.
git credentialsId: 'my-credentials-id', url: 'https://github.com/yourusername/yourrepository.git'
그림: Jenkins Credentials 설정 화면
Jenkins와 Git, GitHub, GitLab을 연동하면 CI/CD 파이프라인의 자동화가 훨씬 쉬워집니다. Git 저장소와 Jenkins의 통합을 통해 효율적인 소프트웨어 개발과 배포가 가능해집니다.