Jenkins

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

이동됨 to GitLab Free in 13.7.

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

Jenkins 통합을 사용해야 하는 경우:

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

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

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

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

GitLab의 Jenkins 통합에 대한 개요는 Jira issues 및 Jenkins 파이프라인과 함께 하는 GitLab 워크플로우를 참조하세요.

GitLab와의 Jenkins 통합을 구성하려면:

  • Jenkins에게 GitLab 프로젝트 액세스 권한을 부여하세요.
  • Jenkins 서버를 구성하세요.
  • Jenkins 프로젝트를 구성하세요.
  • GitLab 프로젝트를 구성하세요.

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

  1. 개인, 프로젝트 또는 그룹 액세스 토큰을 생성하세요.

  2. 액세스 토큰 범위를 API로 설정하세요.
  3. GitLab 서버에서 복사한 액세스 토큰 값을 Jenkins 서버를 구성할 때 붙여넣으세요.

Jenkins 서버를 구성하세요

Jenkins 플러그인을 설치하고 GitLab에 대한 연결을 승인하도록 Jenkins 서버를 구성하세요.

  1. Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택하세요.
  2. Available 탭을 선택하세요. gitlab-plugin을 검색하고 설치를 선택하세요. 플러그인을 설치하는 다른 방법은 Jenkins GitLab 문서를 참조하세요.
  3. Manage Jenkins > Configure System을 선택하세요.
  4. GitLab 섹션에서 ‘/project’ 엔드포인트에 대한 인증 활성화를 선택하세요.
  5. Add를 선택한 다음 Jenkins Credential Provider를 선택하세요.
  6. 토큰 유형으로 GitLab API token을 선택하세요.
  7. API Token에서 GitLab에서 복사한 액세스 토큰 값을 붙여넣고 Add를 선택하세요.
  8. GitLab host URL에 GitLab 서버의 URL을 입력하세요.
  9. 연결을 테스트하려면 Test Connection을 선택하세요.

    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. 다음 확인란을 선택하세요:
    • Accepted Merge Request Events
    • Closed Merge Request Events
  7. 빌드 상태가 GitLab에 보고되는 방법을 지정하세요:
    • Freestyle 프로젝트를 만든 경우 Post-build Actions 섹션에서 Publish 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 프로젝트 구성

다음 중 하나의 방법으로 GitLab과 Jenkins를 통합하려면 다음을 수행하세요.

Jenkins 서버 URL로

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

  1. 왼쪽 사이드바에서 검색 또는 이동하여 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Jenkins를 선택합니다.
  4. 활성 확인란을 선택합니다.
  5. GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
    • Push
    • 병합 요청
    • 태그 푸시
  6. Jenkins 서버 URL을 입력합니다.
  7. 옵션. SSL 확인을 비활성화하려면 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 인스턴스가 자체 관리되는 경우, GitLab 인스턴스에서 제공된 도메인의 Jenkins 인스턴스를 ping합니다.
Jenkins 인스턴스가 로컬 주소에 있고 GitLab 설치의 allowlist에 포함되지 않았습니다. 인스턴스를 GitLab 설치의 allowlist에 추가합니다.
Jenkins 인스턴스의 자격 증명이 충분한 액세스 권한이 없거나 잘못되었습니다. 자격 증명에 충분한 액세스를 부여하거나 유효한 자격 증명을 생성합니다.
/project 엔드포인트에 대한 인증을 활성화하는 확인란이 Jenkins 플러그인 구성에서 선택되지 않았습니다. 확인란을 선택합니다.

병합 요청 중 오류 - “CI 서버에 연결할 수 없음”

만일 GitLab이 Jenkins로부터 커밋 상태 API를 통해 빌드 상태 업데이트를 받지 못하면 병합 요청에서 CI 서버에 연결할 수 없음이라는 오류가 발생할 수 있습니다.

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

이 문제를 해결하려면:

  1. GitLab API 접근을 위해 Jenkins 서버를 구성합니다.
  2. Jenkins 프로젝트를 구성하고, freestyle 프로젝트를 생성하는 경우 “GitLab에 빌드 상태 게시”를 선택했는지 확인합니다.

병합 요청 이벤트가 Jenkins 파이프라인을 트리거하지 않음

이 문제는 요청이 기본적으로 10초로 설정된 웹훅 타임아웃을 초과하는 경우 발생할 수 있습니다.

이 문제에 대해 다음을 확인합니다:

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

    WebHook Error => Net::ReadTimeout
    

    또는

    WebHook Error => execution expired
    

자체 관리 GitLab 인스턴스에서는 웹훅 타임아웃 값을 증가하여 이 문제를 해결할 수 있습니다.

Jenkins에서 작업 로그 활성화

통합 문제를 해결하기 위해 더 많은 빌드 세부 정보를 얻으려면 Jenkins에서 작업 로그를 활성화할 수 있습니다.

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

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

로그를 보려면:

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