Jenkins

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

이동됨 GitLab Free에서 13.7로.

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

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

  • 향후 CI를 Jenkins에서 GitLab CI/CD로 마이그레이션할 계획이지만 임시 솔루션이 필요할 때입니다.
  • Jenkins 플러그인에 투자했으며 앱 빌드를 위해 Jenkins를 계속 사용하기로 선택했을 때입니다.

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

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

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


Jenkins 통합에 대한 개요는
GitLab 작업 흐름과 Jira 이슈 및 Jenkins 파이프라인을 참조하세요.

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

  • Jenkins에 GitLab 프로젝트에 대한 액세스 권한을 부여합니다.
  • Jenkins 서버를 구성합니다.
  • Jenkins 프로젝트를 구성합니다.
  • GitLab 프로젝트를 구성합니다.

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

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

  2. 액세스 토큰 범위를 API로 설정합니다.
  3. 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에서 복사한 액세스 토큰 값을 붙여넣으세요
    그리고 Add를 선택합니다.
  8. GitLab host URL에 GitLab 서버의 URL을 입력합니다.
  9. 연결을 테스트하려면 Test Connection을 선택합니다.

    Jenkins 플러그인 구성

자세한 내용은
Jenkins에서 GitLab로의 인증을 참조하세요.

Jenkins 프로젝트 구성하기

당신의 빌드를 실행할 Jenkins 프로젝트를 설정하세요.

  1. Jenkins 인스턴스에서 New Item을 선택합니다.

  2. 프로젝트 이름을 입력합니다.

  3. Freestyle 또는 Pipeline을 선택하고 OK를 선택합니다.
    Jenkins 플러그인이 GitLab에서 빌드 상태를 업데이트하기 때문에 프리스타일 프로젝트를 선택해야 합니다. 파이프라인 프로젝트에서는 GitLab에서 상태를 업데이트하기 위한 스크립트를 구성해야 합니다.

  4. 드롭다운 목록에서 GitLab 연결을 선택합니다.

  5. GitLab에 변경 사항이 푸시될 때 빌드를 선택합니다.

  6. 다음 체크박스를 선택합니다:
    • Accepted Merge Request Events
    • Closed Merge Request Events
  7. GitLab에 빌드 상태가 보고되는 방식을 지정합니다:
    • 프리스타일 프로젝트를 생성한 경우, Post-build Actions 섹션에서 Publish build status to GitLab을 선택합니다.
    • 파이프라인 프로젝트를 생성한 경우, Jenkins Pipeline 스크립트를 사용하여 GitLab에서 상태를 업데이트해야 합니다.

      예시 Jenkins Pipeline 스크립트:

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

      더 많은 Jenkins Pipeline 스크립트 예시는 Jenkins GitLab 플러그인 리포지토리에서 확인하세요.

GitLab 프로젝트 구성하기

다음 방법 중 하나로 Jenkins와의 GitLab 통합을 구성하세요.

Jenkins 서버 URL 사용하기

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

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. Settings > Integrations를 선택합니다.

  3. Jenkins를 선택합니다.

  4. Active 체크박스를 선택합니다.

  5. GitLab이 Jenkins 빌드를 트리거하도록 하려는 이벤트를 선택합니다:
    • Push
    • Merge request
    • Tag push
  6. Jenkins 서버 URL을 입력합니다.

  7. 선택 사항: Enable SSL verification 체크박스를 해제하여 SSL 검증을 비활성화합니다.

  8. Project name을 입력합니다.
    프로젝트 이름은 URL 친화적이어야 하며, 공백은 밑줄로 대체해야 합니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 볼 때 브라우저의 주소 표시줄에서 복사합니다.

  9. Jenkins 서버에 인증이 필요한 경우, UsernamePassword를 입력합니다.

  10. 선택 사항: Test settings를 선택합니다.

  11. Save changes를 선택합니다.

웹훅 사용하기

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

  1. Jenkins 작업의 구성에서 GitLab 구성 섹션에서 Advanced를 선택합니다.

  2. Secret Token에서 Generate를 선택합니다.

  3. 토큰을 복사하고 작업 구성을 저장합니다.

  4. GitLab에서:
  5. 웹훅을 테스트하려면 Test를 선택합니다.

관련 주제

문제 해결

오류: 연결 실패. 설정을 확인하십시오

GitLab을 구성할 때 연결 실패. 설정을 확인하십시오라는 오류가 발생할 수 있습니다.

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

원인 해결 방법
GitLab이 제공된 주소에서 Jenkins 인스턴스에 도달할 수 없습니다. GitLab 인스턴스가 셀프 매니지드인 경우, GitLab 인스턴스에 제공된 도메인에서 Jenkins 인스턴스를 핑(ping)합니다.
Jenkins 인스턴스가 로컬 주소에 있으며, GitLab 설치의 허용 목록에 포함되어 있지 않습니다. 인스턴스를 GitLab 설치의 허용 목록에 추가합니다.
Jenkins 인스턴스의 자격 증명이 충분한 접근 권한이 없거나 유효하지 않습니다. 자격 증명에 충분한 접근 권한을 부여하거나 유효한 자격 증명을 생성합니다.
/project 엔드포인트에 대한 인증 활성화 체크박스가 Jenkins 플러그인 구성에서 선택되어 있지 않습니다. 체크박스를 선택합니다.

오류: CI 서버에 연결할 수 없습니다

병합 요청에서 CI 서버에 연결할 수 없습니다라는 오류가 발생할 수 있으며, 이는 GitLab이 커밋 상태 API를 통해 Jenkins로부터 빌드 상태 업데이트를 받지 못했기 때문입니다.

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

이 문제를 해결하려면:

  1. Jenkins 서버 구성을 GitLab API 액세스를 위해 구성합니다.
  2. Jenkins 프로젝트 구성하고, 프리스타일 프로젝트를 생성하는 경우 “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. 로그 수준이 모두로 설정되어 있는지 확인하고 저장을 선택합니다.

로그를 보려면:

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