InfoGrab Docs

Jenkins

요약

Jenkins는 프로젝트의 빌드, 배포 및 자동화를 지원하는 오픈 소스 자동화 서버입니다. 다음 경우에 GitLab과의 Jenkins 통합을 사용해야 합니다: 이 통합은 GitLab에 변경 사항이 푸시될 때 Jenkins 빌드를 트리거할 수 있습니다.

히스토리
  • GitLab 13.7에서 GitLab Free로 이동되었습니다.

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

다음 경우에 GitLab과의 Jenkins 통합을 사용해야 합니다:

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

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

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

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

GitLab의 Jenkins 통합 개요는 Jira 이슈 및 Jenkins 파이프라인을 사용한 GitLab 워크플로를 참조하세요.

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

  • GitLab 프로젝트에 Jenkins 접근 권한을 부여합니다.
  • Jenkins 서버를 구성합니다.
  • Jenkins 프로젝트를 구성합니다.
  • GitLab 프로젝트를 구성합니다.

GitLab 프로젝트에 Jenkins 접근 권한 부여#

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

    • 해당 사용자의 모든 Jenkins 통합에 토큰을 사용하려면 개인 접근 토큰을 생성합니다.
    • 프로젝트 수준에서만 토큰을 사용하려면 프로젝트 접근 토큰을 생성합니다. 예를 들어 다른 프로젝트의 Jenkins 통합에 영향을 주지 않고 프로젝트에서 토큰을 취소할 수 있습니다.
    • 해당 그룹의 모든 프로젝트에서 모든 Jenkins 통합에 토큰을 사용하려면 그룹 접근 토큰을 생성합니다.
  2. 접근 토큰 범위를 API로 설정합니다.

  3. Jenkins 서버를 구성하기 위해 접근 토큰 값을 복사합니다.

Jenkins 서버 구성#

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

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

자세한 내용은 Jenkins에서 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 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 스크립트 예시는 GitHub의 Jenkins GitLab 플러그인 리포지터리를 참조하세요.

GitLab 프로젝트 구성#

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

Jenkins 서버 URL 사용#

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

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Integrations를 선택합니다.
  3. Jenkins를 선택합니다.
  4. Active 체크박스를 선택합니다.
  5. GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
    • Push
    • 머지 리퀘스트
    • Tag push
  6. Jenkins server URL을 입력합니다.
  7. 선택 사항. SSL 확인을 비활성화하려면 Enable SSL verification 체크박스를 지웁니다.
  8. Project name을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백은 밑줄로 대체됩니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 볼 때 브라우저 주소 표시줄에서 복사합니다.
  9. Jenkins 서버에 인증이 필요한 경우 UsernamePassword를 입력합니다.
  10. 선택 사항. Test settings를 선택합니다.
  11. Save changes를 선택합니다.

웹훅 사용#

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

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

관련 항목#

문제 해결#

오류: Connection failed. Please check your settings#

GitLab을 구성할 때 Connection failed. Please check your settings라는 오류가 발생할 수 있습니다.

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

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

오류: Could not connect to the CI server#

GitLab이 커밋 상태 API를 통해 Jenkins로부터 빌드 상태 업데이트를 받지 못한 경우 머지 리퀘스트에서 Could not connect to the CI server라는 오류가 발생할 수 있습니다.

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

이 문제를 해결하려면:

  1. GitLab API 접근을 위해 Jenkins 서버를 구성합니다.
  2. Jenkins 프로젝트를 구성하고 freestyle 프로젝트를 생성하는 경우 "Publish build status to GitLab" post-build 작업을 선택했는지 확인합니다.

머지 리퀘스트 이벤트가 Jenkins 파이프라인을 트리거하지 않음#

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

이 문제의 경우 다음을 확인합니다:

  • 요청 실패에 대한 통합 웹훅 로그.

  • 다음과 같은 메시지에 대한 /var/log/gitlab/gitlab-rails/production.log:

    WebHook Error => Net::ReadTimeout
    

    또는

    WebHook Error => execution expired
    

GitLab Self-Managed에서 웹훅 타임아웃 값을 늘려 이 문제를 해결할 수 있습니다.

Jenkins에서 잡 로그 활성화#

통합 문제를 해결하기 위해 Jenkins에서 잡 로그를 활성화하여 빌드에 대한 자세한 정보를 얻을 수 있습니다.

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

  1. Dashboard > Manage Jenkins > System Log로 이동합니다.
  2. Add new log recorder를 선택합니다.
  3. 로그 레코더의 이름을 입력합니다.
  4. 다음 화면에서 Add를 선택하고 com.dabsquared.gitlabjenkins를 입력합니다.
  5. 로그 수준이 All인지 확인하고 Save를 선택합니다.

로그를 보려면:

  1. 빌드를 실행합니다.
  2. Dashboard > Manage Jenkins > System Log로 이동합니다.
  3. 로거를 선택하고 로그를 확인합니다.

Jenkins

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

Jenkins는 프로젝트의 빌드, 배포 및 자동화를 지원하는 오픈 소스 자동화 서버입니다. 다음 경우에 GitLab과의 Jenkins 통합을 사용해야 합니다: 이 통합은 GitLab에 변경 사항이 푸시될 때 Jenkins 빌드를 트리거할 수 있습니다.

히스토리
  • GitLab 13.7에서 GitLab Free로 이동되었습니다.

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

다음 경우에 GitLab과의 Jenkins 통합을 사용해야 합니다:

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

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

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

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

GitLab의 Jenkins 통합 개요는 Jira 이슈 및 Jenkins 파이프라인을 사용한 GitLab 워크플로를 참조하세요.

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

  • GitLab 프로젝트에 Jenkins 접근 권한을 부여합니다.
  • Jenkins 서버를 구성합니다.
  • Jenkins 프로젝트를 구성합니다.
  • GitLab 프로젝트를 구성합니다.

GitLab 프로젝트에 Jenkins 접근 권한 부여#

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

    • 해당 사용자의 모든 Jenkins 통합에 토큰을 사용하려면 개인 접근 토큰을 생성합니다.
    • 프로젝트 수준에서만 토큰을 사용하려면 프로젝트 접근 토큰을 생성합니다. 예를 들어 다른 프로젝트의 Jenkins 통합에 영향을 주지 않고 프로젝트에서 토큰을 취소할 수 있습니다.
    • 해당 그룹의 모든 프로젝트에서 모든 Jenkins 통합에 토큰을 사용하려면 그룹 접근 토큰을 생성합니다.
  2. 접근 토큰 범위를 API로 설정합니다.

  3. Jenkins 서버를 구성하기 위해 접근 토큰 값을 복사합니다.

Jenkins 서버 구성#

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

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

자세한 내용은 Jenkins에서 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 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 스크립트 예시는 GitHub의 Jenkins GitLab 플러그인 리포지터리를 참조하세요.

GitLab 프로젝트 구성#

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

Jenkins 서버 URL 사용#

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

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Integrations를 선택합니다.
  3. Jenkins를 선택합니다.
  4. Active 체크박스를 선택합니다.
  5. GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
    • Push
    • 머지 리퀘스트
    • Tag push
  6. Jenkins server URL을 입력합니다.
  7. 선택 사항. SSL 확인을 비활성화하려면 Enable SSL verification 체크박스를 지웁니다.
  8. Project name을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백은 밑줄로 대체됩니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 볼 때 브라우저 주소 표시줄에서 복사합니다.
  9. Jenkins 서버에 인증이 필요한 경우 UsernamePassword를 입력합니다.
  10. 선택 사항. Test settings를 선택합니다.
  11. Save changes를 선택합니다.

웹훅 사용#

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

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

관련 항목#

문제 해결#

오류: Connection failed. Please check your settings#

GitLab을 구성할 때 Connection failed. Please check your settings라는 오류가 발생할 수 있습니다.

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

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

오류: Could not connect to the CI server#

GitLab이 커밋 상태 API를 통해 Jenkins로부터 빌드 상태 업데이트를 받지 못한 경우 머지 리퀘스트에서 Could not connect to the CI server라는 오류가 발생할 수 있습니다.

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

이 문제를 해결하려면:

  1. GitLab API 접근을 위해 Jenkins 서버를 구성합니다.
  2. Jenkins 프로젝트를 구성하고 freestyle 프로젝트를 생성하는 경우 "Publish build status to GitLab" post-build 작업을 선택했는지 확인합니다.

머지 리퀘스트 이벤트가 Jenkins 파이프라인을 트리거하지 않음#

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

이 문제의 경우 다음을 확인합니다:

  • 요청 실패에 대한 통합 웹훅 로그.

  • 다음과 같은 메시지에 대한 /var/log/gitlab/gitlab-rails/production.log:

    WebHook Error => Net::ReadTimeout
    

    또는

    WebHook Error => execution expired
    

GitLab Self-Managed에서 웹훅 타임아웃 값을 늘려 이 문제를 해결할 수 있습니다.

Jenkins에서 잡 로그 활성화#

통합 문제를 해결하기 위해 Jenkins에서 잡 로그를 활성화하여 빌드에 대한 자세한 정보를 얻을 수 있습니다.

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

  1. Dashboard > Manage Jenkins > System Log로 이동합니다.
  2. Add new log recorder를 선택합니다.
  3. 로그 레코더의 이름을 입력합니다.
  4. 다음 화면에서 Add를 선택하고 com.dabsquared.gitlabjenkins를 입력합니다.
  5. 로그 수준이 All인지 확인하고 Save를 선택합니다.

로그를 보려면:

  1. 빌드를 실행합니다.
  2. Dashboard > Manage Jenkins > System Log로 이동합니다.
  3. 로거를 선택하고 로그를 확인합니다.