Jenkins

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

이동됨 GitLab Free in 13.7으로.

Jenkins는 빌드, 배포 및 프로젝트 자동화를 지원하는 오픈 소스 자동화 서버입니다.

미래에 CI를 Jenkins에서 GitLab CI/CD로 마이그레이션할 계획이지만 임시 솔루션이 필요한 경우 Jenkins 통합을 GitLab과 사용해야 합니다. Jenkins 플러그인에 투자했으며 응용 프로그램 빌드에 계속해서 Jenkins를 사용하려고 하는 경우 GitLab 통합을 사용해야 합니다.

이 통합은 변경이 GitLab에 푸시될 때 Jenkins 빌드를 트리거할 수 있습니다.

이 통합을 사용하여 Jenkins에서 GitLab CI/CD 파이프라인을 트리거할 수는 없습니다. 대신 Jenkins 작업에서 파이프라인 트리거 토큰으로 인증된 파이프라인 트리거 API 엔드포인트를 사용해야 합니다.

Jenkins 통합을 구성한 후에는 코드를 리포지터리에 푸시하거나 GitLab에서 Merge Request을 생성할 때 Jenkins에서 빌드를 트리거합니다. Jenkins 파이프라인 상태는 Merge Request 위젯과 GitLab 프로젝트 홈페이지에 표시됩니다.

Jenkins 통합에 대한 개요는 GitLab workflow with Jira issues and Jenkins pipelines를 참조하세요.

GitLab에서 Jenkins 통합을 구성하려면:

  • Jenkins에게 GitLab 프로젝트에 대한 액세스 권한 부여
  • Jenkins 서버 구성
  • Jenkins 프로젝트 구성
  • GitLab 프로젝트 구성

Jenkins에게 GitLab 프로젝트에 대한 액세스 권한 부여

  1. 개인, 프로젝트 또는 그룹 액세스 토큰을 생성합니다.
    • 해당 사용자의 모든 Jenkins 통합에 토큰을 사용하려면 개인 액세스 토큰을 생성하세요.
    • 프로젝트 수준에서 토큰을 사용하려면 프로젝트 액세스 토큰을 생성하세요. 예를 들어 프로젝트에서 토큰을 취소할 수 있습니다.
    • 해당 그룹의 모든 프로젝트에서 Jenkins 통합에 토큰을 사용하려면 그룹 액세스 토큰을 생성하세요.
  2. 액세스 토큰 범위를 API로 설정합니다.
  3. Jenkins 서버를 구성할 때 GitLab에서 복사한 액세스 토큰 값을 붙여넣습니다.

Jenkins 서버 구성

Jenkins와의 연결을 승인하기 위해 Jenkins 플러그인을 설치하고 구성합니다.

  1. Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택합니다.
  2. Available 탭을 선택합니다. gitlab-plugin을 검색하여 설치합니다. 플러그인을 설치하는 다른 방법에 대해서는 Jenkins GitLab 문서를 참조하세요.
  3. Manage Jenkins > Configure System을 선택합니다.
  4. GitLab 섹션에서 ‘/project’ end-point에 대한 인증 활성화를 선택합니다.
  5. 추가를 선택한 다음 Jenkins 자격 증명 공급자를 선택합니다.
  6. 토큰 유형으로 GitLab API 토큰을 선택합니다.
  7. API 토큰에 GitLab에서 복사한 액세스 토큰 값을 붙여넣고 추가를 선택합니다.
  8. GitLab 호스트 URL에 GitLab 서버의 URL을 입력합니다.
  9. 연결을 테스트하려면 연결 테스트를 선택합니다.

    Jenkins 플러그인 구성

추가 정보는 Jenkins-to-GitLab authentication을 참조하세요.

Jenkins 프로젝트 구성

빌드를 실행할 Jenkins 프로젝트를 설정합니다.

  1. Jenkins에서 New Item을 선택합니다.
  2. 프로젝트 이름을 입력합니다.
  3. Freestyle 또는 Pipeline을 선택한 다음 OK를 선택합니다. Jenkins 플러그인은 GitLab에 빌드 상태를 업데이트하므로 freestyle 프로젝트를 선택해야 합니다. 파이프라인 프로젝트에서는 GitLab에 상태를 업데이트하려면 스크립트를 구성해야 합니다.
  4. 드롭다운 디렉터리에서 GitLab 연결을 선택합니다.
  5. GitLab에 변경 사항이 푸시될 때 빌드를 선택합니다.
  6. 다음 확인란을 선택합니다:
    • 마지막 Merge Request 이벤트 수락
    • 마지막 Merge Request 이벤트 종료
  7. 빌드 상태를 GitLab에 보고하는 방법을 지정합니다:
    • freestyle 프로젝트를 만든 경우 Post-build Actions 섹션에서 Build status to GitLab을 선택합니다.
    • 파이프라인 프로젝트를 만든 경우 Jenkins 파이프라인 스크립트를 구성하여 GitLab에 상태를 업데이트해야 합니다.

      Jenkins 파이프라인 스크립트 예시:

       pipeline {
          agent any
               
          stages {
             stage('gitlab') {
                steps {
                   echo 'Notify GitLab'
                   updateGitlabCommitStatus name: 'build', state: 'pending'
                   updateGitlabCommitStatus name: 'build', state: 'success'
                }
             }
          }
       }
      

      더 많은 Jenkins 파이프라인 스크립트 예시는 다음을 참조하세요: GitHub의 Jenkins GitLab 플러그인 리포지터리.

GitLab 프로젝트 구성

Jenkins와의 연결을 구성하는 방법은 다음 중 하나를 선택하여 GitLab에서 Jenkins 통합을 사용합니다.

Jenkins 서버 URL로

Jenkins 서버 URL 및 인증 정보를 GitLab에 제공할 수 있는 경우 Jenkins 통합에 이 방법을 사용해야 합니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. Setting > Integrations를 선택합니다.
  3. Jenkins를 선택합니다.
  4. 활성화 확인란을 선택합니다.
  5. GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
    • 푸시
    • Merge Request
    • 태그 푸시
  6. Jenkins 서버 URL을 입력합니다.
  7. SSL verification을 비활성화하려면 SSL 확인 활성화 확인란을 선택하지 않습니다.
  8. 프로젝트 이름을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백은 밑줄로 대체되어야 합니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 보고 있는 동안 브라우저 주소 표시줄에서 복사하세요.
  9. Jenkins 서버가 인증을 요구하는 경우 사용자 이름비밀번호를 입력합니다.
  10. 설정 테스트를 선택합니다.
  11. 변경 사항 저장를 선택합니다.

웹훅을 사용하여

만약 Jenkins 서버 URL 및 인증 정보를 GitLab에 제공할 수 없다면, GitLab과 Jenkins를 통합하기 위해 웹훅을 구성할 수 있습니다.

  1. Jenkins 작업 구성에서 GitLab 구성 섹션에서 고급을 선택합니다.
  2. Secret Token 아래 생성을 선택합니다.
  3. 토큰을 복사하고 작업 구성을 저장합니다.
  4. GitLab에서:
    • 프로젝트용 웹훅을 생성합니다.
    • 트리거 URL(예: https://JENKINS_URL/project/YOUR_JOB)을 입력합니다.
    • Secret Token에 토큰을 붙여넣습니다.
  5. 웹훅을 테스트하려면 테스트를 선택합니다.

관련 주제

문제 해결

GitLab 구성 중 오류 - “연결 실패. 설정을 확인하세요.”

GitLab을 구성하는 도중 “연결 실패. 설정을 확인하세요.”라는 오류가 발생할 수 있습니다.

이 문제에는 여러 가능한 원인과 해결책이 있습니다:

원인 해결 방법
GitLab이 주어진 주소의 Jenkins 인스턴스에 도달할 수 없습니다. GitLab 인스턴스가 Self-managed되는 경우, GitLab 인스턴스에서 제공된 도메인의 Jenkins 인스턴스에 핑을 보냅니다.
Jenkins 인스턴스가 로컬 주소에 있고 GitLab 설치의 허용 디렉터리에 포함되어 있지 않습니다. 인스턴스를 GitLab 설치의 허용 디렉터리에 추가합니다.
Jenkins 인스턴스의 자격 증명이 충분한 액세스 권한이 없거나 유효하지 않습니다. 자격 증명에 충분한 액세스를 부여하거나 유효한 자격 증명을 생성합니다.
/project 엔드포인트에 대해 인증 사용 확인란이 Jenkins 플러그인 구성에서 선택되지 않았습니다. 확인란을 선택합니다.

Merge Request에서 오류 - “CI 서버에 연결할 수 없음”

Merge Request에서 CI 서버에 연결할 수 없음이라는 오류가 발생할 수 있습니다. 이 경우, GitLab이 커밋 상태 API를 통해 Jenkins로부터 빌드 상태 업데이트를 받지 못한 경우입니다.

이 문제는 Jenkins가 올바르게 구성되지 않았거나 API를 통해 상태를 보고하는 데 오류가 있는 경우 발생합니다.

이 문제를 해결하려면:

  1. GitLab API 액세스를 위해 Jenkins 서버를 구성합니다.
  2. Jenkins 프로젝트를 구성하고, Freestyle 프로젝트를 만든 경우 “GitLab에 빌드 상태 게시” 후속 조치를 선택하는지 확인합니다.

Merge Request 이벤트가 Jenkins 파이프라인을 트리거하지 않음

Merge Request 요청 시 웹훅 타임아웃을 초과하면 이 문제가 발생할 수 있습니다. 기본적으로 타임아웃은 10초로 설정되어 있습니다.

이 문제를 해결하려면 다음을 확인하십시오:

  • 요청 실패에 대한 통합 웹훅 로그
  • /var/log/gitlab/gitlab-rails/production.log에서 다음과 같은 메시지를 확인합니다:

    WebHook Error => Net::ReadTimeout
    

    또는

    WebHook Error => execution expired
    

Self-managed GitLab 인스턴스의 경우 웹훅 타임아웃 값을 늘려 이 문제를 해결할 수 있습니다.

Jenkins에서 작업 로그 활성화

통합 문제를 해결하기 위해 Jenkins에서 작업 로그를 활성화할 수 있습니다.

Jenkins에서 작업 로그를 활성화하려면:

  1. 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
  2. 새 로그 레코더 추가를 선택합니다.
  3. 로그 레코더 이름을 입력합니다.
  4. 다음 화면에서 추가를 선택하고 com.dabsquared.gitlabjenkins를 입력합니다.
  5. 로그 레벨이 모두로 설정되어 있는지 확인하고 저장을 선택합니다.

로그 보기:

  1. 빌드를 실행합니다.
  2. 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
  3. 로거를 선택하고 로그를 확인합니다.