Jenkins
이동됨 to GitLab Free in 13.7.
Jenkins는 빌드, 배포 및 프로젝트 자동화를 지원하는 오픈 소스 자동화 서버입니다.
Jenkins 통합을 사용해야 하는 경우:
- 미래에 CI를 Jenkins에서 GitLab CI/CD로 마이그레이션할 계획이 있지만 임시 솔루션이 필요한 경우.
- Jenkins 플러그인에 투자했으며 계속해서 Jenkins를 사용하여 응용 프로그램을 빌드하려는 경우.
이 통합은 GitLab에 변경 내용이 푸시될 때 Jenkins 빌드를 트리거할 수 있습니다.
이 통합을 사용하여 Jenkins에서 GitLab CI/CD 파이프라인을 트리거할 수는 없습니다. 대신, Jenkins 작업에서 파이프라인 트리거 토큰으로 인증된 파이프라인 트리거 API 엔드포인트를 사용하세요.
Jenkins 통합을 구성한 후, 리포지토리에 코드를 푸시하거나 GitLab에서 병합 요청을 생성할 때 Jenkins에서 빌드를 트리거합니다. Jenkins 파이프라인 상태는 병합 요청 위젯 및 GitLab 프로젝트의 홈 페이지에 표시됩니다.
GitLab의 Jenkins 통합에 대한 개요는 Jira issues 및 Jenkins 파이프라인과 함께 하는 GitLab 워크플로우를 참조하세요.
GitLab와의 Jenkins 통합을 구성하려면:
- Jenkins에게 GitLab 프로젝트 액세스 권한을 부여하세요.
- Jenkins 서버를 구성하세요.
- Jenkins 프로젝트를 구성하세요.
- GitLab 프로젝트를 구성하세요.
Jenkins에게 GitLab 프로젝트 액세스 권한 부여
-
개인, 프로젝트 또는 그룹 액세스 토큰을 생성하세요.
- 개인 액세스 토큰 생성: 해당 사용자의 모든 Jenkins 통합에 해당 토큰을 사용하세요.
- 프로젝트 액세스 토큰 생성: 프로젝트 수준에서만 토큰을 사용하세요. 예를 들어, 해당 프로젝트의 토큰을 취소하면 다른 프로젝트의 Jenkins 통합에는 영향을 미치지 않습니다.
- 그룹 액세스 토큰 생성: 해당 그룹의 모든 프로젝트의 모든 Jenkins 통합에 해당 토큰을 사용하세요.
- 액세스 토큰 범위를 API로 설정하세요.
- GitLab 서버에서 복사한 액세스 토큰 값을 Jenkins 서버를 구성할 때 붙여넣으세요.
Jenkins 서버를 구성하세요
Jenkins 플러그인을 설치하고 GitLab에 대한 연결을 승인하도록 Jenkins 서버를 구성하세요.
- Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택하세요.
-
Available 탭을 선택하세요.
gitlab-plugin
을 검색하고 설치를 선택하세요. 플러그인을 설치하는 다른 방법은 Jenkins GitLab 문서를 참조하세요. - Manage Jenkins > Configure System을 선택하세요.
- GitLab 섹션에서 ‘/project’ 엔드포인트에 대한 인증 활성화를 선택하세요.
- Add를 선택한 다음 Jenkins Credential Provider를 선택하세요.
- 토큰 유형으로 GitLab API token을 선택하세요.
- API Token에서 GitLab에서 복사한 액세스 토큰 값을 붙여넣고 Add를 선택하세요.
- GitLab host URL에 GitLab 서버의 URL을 입력하세요.
-
연결을 테스트하려면 Test Connection을 선택하세요.
자세한 정보는 Jenkins-to-GitLab authentication를 참조하세요.
Jenkins 프로젝트를 구성하세요
빌드를 실행할 Jenkins 프로젝트를 설정하세요.
- Jenkins 인스턴스에서 New Item을 선택하세요.
- 프로젝트 이름을 입력하세요.
- Freestyle 또는 Pipeline을 선택하고 OK를 선택하세요. Jenkins 플러그인은 GitLab에서 빌드 상태를 업데이트하므로 Freestyle 프로젝트를 선택해야 합니다. 파이프라인 프로젝트에서는 GitLab의 상태를 업데이트하기 위해 스크립트를 구성해야 합니다.
- 드롭다운 목록에서 GitLab 연결을 선택하세요.
- GitLab에 변경 사항이 푸시될 때 빌드를 선택하세요.
- 다음 확인란을 선택하세요:
- Accepted Merge Request Events
- Closed Merge Request Events
- 빌드 상태가 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 통합을 위해 GitLab에게 Jenkins 서버 URL 및 인증 정보를 제공할 수 있다면 이 방법을 사용해야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동하여 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Jenkins를 선택합니다.
- 활성 확인란을 선택합니다.
- GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
- Push
- 병합 요청
- 태그 푸시
- Jenkins 서버 URL을 입력합니다.
- 옵션. SSL 확인을 비활성화하려면 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 인스턴스가 자체 관리되는 경우, GitLab 인스턴스에서 제공된 도메인의 Jenkins 인스턴스를 ping합니다. |
Jenkins 인스턴스가 로컬 주소에 있고 GitLab 설치의 allowlist에 포함되지 않았습니다. | 인스턴스를 GitLab 설치의 allowlist에 추가합니다. |
Jenkins 인스턴스의 자격 증명이 충분한 액세스 권한이 없거나 잘못되었습니다. | 자격 증명에 충분한 액세스를 부여하거나 유효한 자격 증명을 생성합니다. |
/project 엔드포인트에 대한 인증을 활성화하는 확인란이 Jenkins 플러그인 구성에서 선택되지 않았습니다. | 확인란을 선택합니다. |
병합 요청 중 오류 - “CI 서버에 연결할 수 없음”
만일 GitLab이 Jenkins로부터 커밋 상태 API를 통해 빌드 상태 업데이트를 받지 못하면 병합 요청에서 CI 서버에 연결할 수 없음
이라는 오류가 발생할 수 있습니다.
이 문제는 Jenkins가 올바르게 구성되지 않았거나 API를 통해 상태를 보고하는 데 오류가 있는 경우 발생합니다.
이 문제를 해결하려면:
- GitLab API 접근을 위해 Jenkins 서버를 구성합니다.
- Jenkins 프로젝트를 구성하고, freestyle 프로젝트를 생성하는 경우 “GitLab에 빌드 상태 게시”를 선택했는지 확인합니다.
병합 요청 이벤트가 Jenkins 파이프라인을 트리거하지 않음
이 문제는 요청이 기본적으로 10초로 설정된 웹훅 타임아웃을 초과하는 경우 발생할 수 있습니다.
이 문제에 대해 다음을 확인합니다:
- 요청 실패를 위해 통합 웹훅 로그를 확인합니다.
-
/var/log/gitlab/gitlab-rails/production.log
에서 다음과 같은 메시지를 확인합니다:WebHook Error => Net::ReadTimeout
또는
WebHook Error => execution expired
자체 관리 GitLab 인스턴스에서는 웹훅 타임아웃 값을 증가하여 이 문제를 해결할 수 있습니다.
Jenkins에서 작업 로그 활성화
통합 문제를 해결하기 위해 더 많은 빌드 세부 정보를 얻으려면 Jenkins에서 작업 로그를 활성화할 수 있습니다.
Jenkins에서 작업 로그를 활성화하려면:
- 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
- 새 로그 레코더 추가를 선택합니다.
- 로그 레코더에 이름을 입력합니다.
- 다음 화면에서 추가를 선택하고
com.dabsquared.gitlabjenkins
를 입력합니다. - 로그 레벨이 모두(All)로 설정되었는지 확인하고 저장을 선택합니다.
로그를 보려면:
- 빌드를 실행합니다.
- 대시보드 > Jenkins 관리 > 시스템 로그로 이동합니다.
- 로거를 선택하고 로그를 확인합니다.