Jenkins와 Git, GitHub, GitLab 연동

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 연동 설정 화면

Git 연동 설정

2. GitHub Webhook을 이용한 자동 빌드

GitHub Webhook은 GitHub 저장소에서 코드가 푸시될 때 자동으로 Jenkins에서 빌드를 트리거할 수 있게 해주는 기능입니다. 이를 통해 개발자는 GitHub에 커밋을 푸시할 때마다 자동으로 Jenkins 빌드를 실행할 수 있습니다.

2.1. GitHub Webhook 설정 방법

  1. Jenkins에 GitHub Plugin 설치: 먼저 GitHub 플러그인을 설치합니다.
  2. Jenkins Job 설정:
    • GitHub Webhook을 사용하려면 GitHub 프로젝트와 연결된 Jenkins Job을 만들어야 합니다.
    • 빌드 트리거를 GitHub hook trigger for GITScm polling으로 설정합니다.
  3. GitHub Webhook 설정:
    • GitHub에서 리포지토리의 Settings -> Webhooks로 이동 후, Jenkins URL을 입력하고 Webhook을 추가합니다.

예시: GitHub Webhook 설정

triggers {
    githubPush()
}

그림: GitHub Webhook 설정 화면

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 설정

  1. Multi-branch Pipeline Job 생성: Jenkins에서 새로운 Multi-branch Pipeline Job을 생성합니다.
  2. Git 저장소 연결: GitHub나 GitLab 리포지토리와 연결합니다.
  3. 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 설정 화면

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 ActionsJenkins는 모두 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 설정 방법

  1. Jenkins 대시보드에서 Manage Jenkins -> Manage Credentials로 이동합니다.
  2. Git 저장소 인증 정보 추가: SSH 키나 사용자 이름/비밀번호 등을 입력하여 Git 인증 정보를 저장합니다.
  3. Job에서 인증 정보 사용: Jenkinsfile이나 Job 설정에서 이 인증 정보를 참조하여 Git과 연결합니다.
git credentialsId: 'my-credentials-id', url: 'https://github.com/yourusername/yourrepository.git'

그림: Jenkins Credentials 설정 화면

Jenkins Credentials 설정


Jenkins와 Git, GitHub, GitLab을 연동하면 CI/CD 파이프라인의 자동화가 훨씬 쉬워집니다. Git 저장소와 Jenkins의 통합을 통해 효율적인 소프트웨어 개발과 배포가 가능해집니다.

RSS Feed