Jenkins
이동됨 GitLab Free in 13.7으로.
Jenkins는 빌드, 배포 및 프로젝트 자동화를 지원하는 오픈 소스 자동화 서버입니다.
미래에 CI를 Jenkins에서 GitLab CI/CD로 마이그레이션할 계획이지만 임시 솔루션이 필요한 경우 Jenkins 통합을 GitLab과 사용해야 합니다. Jenkins 플러그인에 투자했으며 응용 프로그램 빌드에 계속해서 Jenkins를 사용하려고 하는 경우 GitLab 통합을 사용해야 합니다.
이 통합은 변경이 GitLab에 푸시될 때 Jenkins 빌드를 트리거할 수 있습니다.
이 통합을 사용하여 Jenkins에서 GitLab CI/CD 파이프라인을 트리거할 수는 없습니다. 대신 Jenkins 작업에서 파이프라인 트리거 토큰으로 인증된 파이프라인 트리거 API 엔드포인트를 사용해야 합니다.
Jenkins 통합을 구성한 후에는 코드를 리포지터리에 푸시하거나 GitLab에서 Merge Request을 생성할 때 Jenkins에서 빌드를 트리거합니다. Jenkins 파이프라인 상태는 Merge Request 위젯과 GitLab 프로젝트 홈페이지에 표시됩니다.
Jenkins 통합에 대한 개요는 GitLab workflow with Jira issues and Jenkins pipelines를 참조하세요.
GitLab에서 Jenkins 통합을 구성하려면:
- Jenkins에게 GitLab 프로젝트에 대한 액세스 권한 부여
- Jenkins 서버 구성
- Jenkins 프로젝트 구성
- GitLab 프로젝트 구성
Jenkins에게 GitLab 프로젝트에 대한 액세스 권한 부여
- 개인, 프로젝트 또는 그룹 액세스 토큰을 생성합니다.
- 해당 사용자의 모든 Jenkins 통합에 토큰을 사용하려면 개인 액세스 토큰을 생성하세요.
- 프로젝트 수준에서 토큰을 사용하려면 프로젝트 액세스 토큰을 생성하세요. 예를 들어 프로젝트에서 토큰을 취소할 수 있습니다.
- 해당 그룹의 모든 프로젝트에서 Jenkins 통합에 토큰을 사용하려면 그룹 액세스 토큰을 생성하세요.
- 액세스 토큰 범위를 API로 설정합니다.
- Jenkins 서버를 구성할 때 GitLab에서 복사한 액세스 토큰 값을 붙여넣습니다.
Jenkins 서버 구성
Jenkins와의 연결을 승인하기 위해 Jenkins 플러그인을 설치하고 구성합니다.
- Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택합니다.
-
Available 탭을 선택합니다.
gitlab-plugin
을 검색하여 설치합니다. 플러그인을 설치하는 다른 방법에 대해서는 Jenkins GitLab 문서를 참조하세요. - Manage Jenkins > Configure System을 선택합니다.
- GitLab 섹션에서 ‘/project’ end-point에 대한 인증 활성화를 선택합니다.
- 추가를 선택한 다음 Jenkins 자격 증명 공급자를 선택합니다.
- 토큰 유형으로 GitLab API 토큰을 선택합니다.
- API 토큰에 GitLab에서 복사한 액세스 토큰 값을 붙여넣고 추가를 선택합니다.
- GitLab 호스트 URL에 GitLab 서버의 URL을 입력합니다.
-
연결을 테스트하려면 연결 테스트를 선택합니다.
추가 정보는 Jenkins-to-GitLab authentication을 참조하세요.
Jenkins 프로젝트 구성
빌드를 실행할 Jenkins 프로젝트를 설정합니다.
- Jenkins에서 New Item을 선택합니다.
- 프로젝트 이름을 입력합니다.
- Freestyle 또는 Pipeline을 선택한 다음 OK를 선택합니다. Jenkins 플러그인은 GitLab에 빌드 상태를 업데이트하므로 freestyle 프로젝트를 선택해야 합니다. 파이프라인 프로젝트에서는 GitLab에 상태를 업데이트하려면 스크립트를 구성해야 합니다.
- 드롭다운 디렉터리에서 GitLab 연결을 선택합니다.
- GitLab에 변경 사항이 푸시될 때 빌드를 선택합니다.
- 다음 확인란을 선택합니다:
- 마지막 Merge Request 이벤트 수락
- 마지막 Merge Request 이벤트 종료
- 빌드 상태를 GitLab에 보고하는 방법을 지정합니다:
- freestyle 프로젝트를 만든 경우 Post-build Actions 섹션에서 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 프로젝트 구성
Jenkins와의 연결을 구성하는 방법은 다음 중 하나를 선택하여 GitLab에서 Jenkins 통합을 사용합니다.
Jenkins 서버 URL로
Jenkins 서버 URL 및 인증 정보를 GitLab에 제공할 수 있는 경우 Jenkins 통합에 이 방법을 사용해야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- Setting > Integrations를 선택합니다.
- Jenkins를 선택합니다.
- 활성화 확인란을 선택합니다.
- GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
- 푸시
- Merge Request
- 태그 푸시
- Jenkins 서버 URL을 입력합니다.
- SSL verification을 비활성화하려면 SSL 확인 활성화 확인란을 선택하지 않습니다.
- 프로젝트 이름을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백은 밑줄로 대체되어야 합니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 보고 있는 동안 브라우저 주소 표시줄에서 복사하세요.
- Jenkins 서버가 인증을 요구하는 경우 사용자 이름 및 비밀번호를 입력합니다.
- 설정 테스트를 선택합니다.
- 변경 사항 저장를 선택합니다.
웹훅을 사용하여
만약 Jenkins 서버 URL 및 인증 정보를 GitLab에 제공할 수 없다면, GitLab과 Jenkins를 통합하기 위해 웹훅을 구성할 수 있습니다.
- Jenkins 작업 구성에서 GitLab 구성 섹션에서 고급을 선택합니다.
- Secret Token 아래 생성을 선택합니다.
- 토큰을 복사하고 작업 구성을 저장합니다.
- GitLab에서:
- 프로젝트용 웹훅을 생성합니다.
- 트리거 URL(예:
https://JENKINS_URL/project/YOUR_JOB
)을 입력합니다. - Secret Token에 토큰을 붙여넣습니다.
- 웹훅을 테스트하려면 테스트를 선택합니다.
관련 주제
- GitLab Jenkins 통합
- 로컬 머신에서 Jenkins 설정하는 방법
- Jenkins에서 GitLab CI/CD로 마이그레이션하는 방법
- Jenkins에서 GitLab로: CI/CD 환경을 현대화하는 궁극의 안내서
문제 해결
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를 통해 상태를 보고하는 데 오류가 있는 경우 발생합니다.
이 문제를 해결하려면:
- GitLab API 액세스를 위해 Jenkins 서버를 구성합니다.
- Jenkins 프로젝트를 구성하고, Freestyle 프로젝트를 만든 경우 “GitLab에 빌드 상태 게시” 후속 조치를 선택하는지 확인합니다.
Merge Request 이벤트가 Jenkins 파이프라인을 트리거하지 않음
Merge Request 요청 시 웹훅 타임아웃을 초과하면 이 문제가 발생할 수 있습니다. 기본적으로 타임아웃은 10초로 설정되어 있습니다.
이 문제를 해결하려면 다음을 확인하십시오:
- 요청 실패에 대한 통합 웹훅 로그
-
/var/log/gitlab/gitlab-rails/production.log
에서 다음과 같은 메시지를 확인합니다:WebHook Error => Net::ReadTimeout
또는
WebHook Error => execution expired
Self-managed GitLab 인스턴스의 경우 웹훅 타임아웃 값을 늘려 이 문제를 해결할 수 있습니다.
Jenkins에서 작업 로그 활성화
통합 문제를 해결하기 위해 Jenkins에서 작업 로그를 활성화할 수 있습니다.
Jenkins에서 작업 로그를 활성화하려면:
- 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
- 새 로그 레코더 추가를 선택합니다.
- 로그 레코더 이름을 입력합니다.
- 다음 화면에서 추가를 선택하고
com.dabsquared.gitlabjenkins
를 입력합니다. - 로그 레벨이 모두로 설정되어 있는지 확인하고 저장을 선택합니다.
로그 보기:
- 빌드를 실행합니다.
- 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
- 로거를 선택하고 로그를 확인합니다.