Jenkins
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 접근 권한 부여#
-
개인, 프로젝트 또는 그룹 접근 토큰을 생성합니다.
- 해당 사용자의 모든 Jenkins 통합에 토큰을 사용하려면 개인 접근 토큰을 생성합니다.
- 프로젝트 수준에서만 토큰을 사용하려면 프로젝트 접근 토큰을 생성합니다. 예를 들어 다른 프로젝트의 Jenkins 통합에 영향을 주지 않고 프로젝트에서 토큰을 취소할 수 있습니다.
- 해당 그룹의 모든 프로젝트에서 모든 Jenkins 통합에 토큰을 사용하려면 그룹 접근 토큰을 생성합니다.
-
접근 토큰 범위를 API로 설정합니다.
-
Jenkins 서버를 구성하기 위해 접근 토큰 값을 복사합니다.
Jenkins 서버 구성#
Jenkins 플러그인을 설치하고 구성하여 GitLab에 대한 연결을 인증합니다.
- Jenkins 서버에서 Manage Jenkins > Manage Plugins를 선택합니다.
- Available 탭을 선택합니다.
gitlab-plugin을 검색하고 설치하려면 선택합니다. 플러그인을 설치하는 다른 방법은 Jenkins GitLab 문서를 참조하세요. - Manage Jenkins > Configure System을 선택합니다.
- GitLab 섹션에서 '/project' end-point에 대한 인증 활성화를 선택합니다.
- Add를 선택한 다음 Jenkins Credential Provider를 선택합니다.
- 토큰 유형으로 GitLab API token을 선택합니다.
- API Token에 GitLab에서 복사한 접근 토큰 값을 붙여넣고 Add를 선택합니다.
- GitLab host URL에 GitLab 서버의 URL을 입력합니다.
- 연결을 테스트하려면 Test Connection을 선택합니다.
자세한 내용은 Jenkins에서 GitLab으로의 인증을 참조하세요.
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 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 통합에 이 방법을 사용해야 합니다.
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Integrations를 선택합니다.
- Jenkins를 선택합니다.
- Active 체크박스를 선택합니다.
- GitLab이 Jenkins 빌드를 트리거할 이벤트를 선택합니다:
- Push
- 머지 리퀘스트
- Tag push
- Jenkins server URL을 입력합니다.
- 선택 사항. SSL 확인을 비활성화하려면 Enable SSL verification 체크박스를 지웁니다.
- Project name을 입력합니다. 프로젝트 이름은 URL 친화적이어야 하며 공백은 밑줄로 대체됩니다. 프로젝트 이름이 유효한지 확인하려면 Jenkins 프로젝트를 볼 때 브라우저 주소 표시줄에서 복사합니다.
- Jenkins 서버에 인증이 필요한 경우 Username 및 Password를 입력합니다.
- 선택 사항. Test settings를 선택합니다.
- Save changes를 선택합니다.
웹훅 사용#
GitLab에 Jenkins 서버 URL과 인증 정보를 제공할 수 없는 경우 웹훅을 구성하여 GitLab과 Jenkins를 통합할 수 있습니다.
- Jenkins 잡 구성의 GitLab 구성 섹션에서 Advanced를 선택합니다.
- Secret Token 아래에서 Generate를 선택합니다.
- 토큰을 복사하고 잡 구성을 저장합니다.
- GitLab에서:
- 프로젝트에 대한 웹훅을 생성합니다.
- 트리거 URL(예:
https://JENKINS_URL/project/YOUR_JOB)을 입력합니다. - Secret Token에 토큰을 붙여넣습니다.
- 웹훅을 테스트하려면 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를 통해 상태를 보고하는 데 오류가 있을 때 발생합니다.
이 문제를 해결하려면:
- GitLab API 접근을 위해 Jenkins 서버를 구성합니다.
- 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에서 잡 로그를 활성화하려면:
- Dashboard > Manage Jenkins > System Log로 이동합니다.
- Add new log recorder를 선택합니다.
- 로그 레코더의 이름을 입력합니다.
- 다음 화면에서 Add를 선택하고
com.dabsquared.gitlabjenkins를 입력합니다. - 로그 수준이 All인지 확인하고 Save를 선택합니다.
로그를 보려면:
- 빌드를 실행합니다.
- Dashboard > Manage Jenkins > System Log로 이동합니다.
- 로거를 선택하고 로그를 확인합니다.
