젠킨스

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

여기 참조: GitLab Free in 13.7로 이동함.

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

젠킨스 통합을 사용해야 하는 이유:

  • 나중에 CI를 젠킨스에서 GitLab CI/CD로 마이그레이션할 계획이지만 임시 솔루션이 필요한 경우.
  • Jenkins 플러그인에 투자하고 앱을 빌드하기 위해 계속하여 Jenkins를 사용하기로 선택한 경우.

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

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

젠킨스 통합을 설정한 후에 코드를 리포지토리에 푸시하거나 GitLab에서 병합 요청을 생성하면 젠킨스에서 빌드를 트리거합니다. 젠킨스 파이프라인 상태는 병합 요청 위젯 및 GitLab 프로젝트 홈 페이지에 표시됩니다.

GitLab의 젠킨스 통합 개요는 Jira 이슈 및 젠킨스 파이프라인과 함께 하는 GitLab 워크플로우를 참조하세요.

GitLab과의 젠킨스 통합 설정:

  • 젠킨스에 GitLab 프로젝트 액세스 부여.
  • Jenkins 서버 구성.
  • Jenkins 프로젝트 구성.
  • GitLab 프로젝트 구성.

젠킨스에 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. 추가를 선택한 후 Jenkins 자격 증명 제공자를 선택합니다.
  6. 토큰 유형으로 GitLab API token을 선택합니다.
  7. API TokenGitLab에서 복사한 액세스 토큰 값을 붙여넣기하고 Add를 선택합니다.
  8. GitLab 호스트 URL에 GitLab 서버의 URL을 입력합니다.
  9. 연결을 테스트하려면 Test Connection을 선택합니다.

    Jenkins 플러그인 구성

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

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 서버 URL과 인증 정보를 GitLab에 제공할 수 있는 경우 이 방법을 사용해야 합니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. Settings > Integrations을 선택합니다.
  3. Jenkins를 선택합니다.
  4. 활성 확인란을 선택합니다.
  5. GitLab이 Jenkins 빌드를 트리거해야 하는 이벤트를 선택합니다:
    • 푸시
    • 병합 요청
    • 태그 푸시
  6. Jenkins 서버 URL을 입력합니다.
  7. HTTPS 검증을 비활성화하기 위해 SSL 확인 활성화 확인란을 선택해도 됩니다.
  8. 프로젝트 이름을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백을 밑줄(_)로 대체해야 합니다. 유효한 프로젝트 이름인지 확인하려면 Jenkins 프로젝트를 볼 때 브라우저 주소 표시줄에서 복사하세요.
  9. Jenkins 서버가 인증을 필요로 하는 경우 사용자 이름암호를 입력합니다.
  10. Settings 테스트를 선택합니다.
  11. 변경 저장을 선택합니다.

웹훅을 사용하여

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

  1. Jenkins 작업의 구성에서 GitLab 구성 섹션 아래 고급을 선택합니다.
  2. Secret Token에서 생성을 선택합니다.
  3. 토큰을 복사하고 작업 구성을 저장합니다.
  4. GitLab에서:
  5. 웹훅을 테스트하려면 테스트를 선택합니다.

관련 주제

문제 해결

오류: 연결 실패. 설정을 확인하세요

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

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

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

오류: CI 서버에 연결할 수 없음

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

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

이 문제를 해결하려면:

  1. GitLab API 액세스를 위해 Jenkins 서버를 구성합니다.
  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. 로거를 선택하고 로그를 확인합니다.