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 통합을 구성한 후 GitHub 리포지터리에 코드를 푸시하거나 GitLab에서 머지 요청을 만들면 Jenkins에서 빌드를 트리거합니다. 머지 요청 위젯과 GitLab 프로젝트의 홈페이지에 Jenkins 파이프라인 상태가 표시됩니다.

GitLab에서의 Jenkins 통합에 대한 개요는 GitLab workflow with Jira issues and Jenkins pipelines를 참조하십시오.

Jenkins를 GitLab과 통합하려면 다음을 수행합니다:

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

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

  1. 개인, 프로젝트 또는 그룹 액세스 토큰을 만듭니다.
  2. 액세스 토큰 범위를 API로 설정합니다.
  3. Jenkins 서버를 구성할 때 GitLab에서 복사한 액세스 토큰 값을 붙여넣습니다.

Jenkins 서버 구성

Jenkins 플러그인을 설치하고 구성하여 GitLab 연결을 승인합니다.

  1. Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택합니다.
  2. 사용 가능한 탭에서 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 인스턴스에서 새 항목을 선택합니다.
  2. 프로젝트 이름을 입력합니다.
  3. Freestyle 또는 Pipeline을 선택하고 OK을 선택합니다. Jenkins 플러그인은 GitLab에서 빌드 상태를 업데이트하므로 프리스타일 프로젝트를 선택해야 합니다. 파이프라인 프로젝트에서는 GitLab에 상태를 업데이트하려면 스크립트를 구성해야 합니다.
  4. 드롭다운 디렉터리에서 GitLab 연결을 선택합니다.
  5. GitLab에 변경 사항이 푸시될 때 빌드를 선택합니다.
  6. 다음 확인란을 선택합니다:
    • 승인된 머지 요청 이벤트
    • 완료된 머지 요청 이벤트
  7. 빌드 상태를 GitLab에 보고하는 방법을 지정합니다:
    • 프리스타일 프로젝트를 만든 경우 비즈니스 빌드 상태를 GitLab에 발행을 선택합니다.
    • 파이프라인 프로젝트를 만든 경우 Jenkins Pipeline 스크립트를 구성하여 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 서버 URL로

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

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

웹훅으로

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

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

관련 주제

Troubleshooting

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 프로젝트를 구성하고, 프리스타일 프로젝트를 생성하는 경우 “GitLab에 빌드 상태 전송” 후 빌드 동작을 선택했는지 확인합니다.

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

이 문제는 요청이 기본적으로 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. 로그 레벨이 All인지 확인하고 저장을 선택합니다.

로그 보기:

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