
GitLab을 사용하고 Jenkins를 통해 CI를 수행하는 환경에서 이를 연동해서 자동으로 빌드가 이루어지 도록 할 때, 몇가지 이슈사항을 어떻게 해결하면 좋을지와 실제화면상에 어떤 Value들을 입력하면 좋을지에 대해 정리해보았습니다.
실제 GitLab과 Jenkins를 연결하는 방법은 다음과 같은 순서로 진행되었습니다.
- GitLab에 Access Token 발급
- Jenkins에서 GitLab과 연동을 위해 1에서 발급받았던 Access Token을 credential로 추가한다.
- Jenkins에서 추가한 credential을 global setting에서 gitlab 설정으로 추가한다.
- Jenkins에서 자동 Build Trigger가 진행되도록 설정한다.
- GitLab에서 Webhook을 생성한다.
연동 환경
- Jenkins 2.204.1
- GitLab 12.6.4
설정방법
1. GitLab에서 Access Token 발급
아래와 같이 GitLab에 접근하여 개인 계정의 Settings의 Access Tokens으로 이동합니다.

아래와 같은 권한을 설정합니다.

생성된 token을 복사해둡니다.

2. Jenkins에서 GitLab과 연동을 위한 Credential 추가
우선 GitLab token을 사용하는 Credential을 생성합니다.

아래와 같이 종류는 GitLab API Token 로 생성합니다.(해당 credential type을 사용하기 위해서는 gitlab plugin이 사전에 설치되어 있어야 합니다.)

3. Jenkins에서 Credential을 Global Settings에 Gitlab으로 추가
실제 Jenkins와 Gitlab 연동을 위한 Jenkins의 Manage Jenkins 상에 Configure System 에서

아래와 같은 설정을 추가합니다. credential은 앞서 생성한 credential을 선택합니다.

참고할것은 URL내에 http:// 를 필히 입력해야 합니다.
또한 URL은 lookup이 가능한 domain 혹은 svc.cluster.local.와 같은 내부 도메인을 사용해도 무방합니다.
이후 Jenkins에 GitLab과 연동할 User를 생성합니다. (Jenkins 관리상에서 Create User 수행)

4. Jenkins에서 자동 Build trigger가 진행되도록 설정
Jenkins 상에서 “Build when a change is pushed to GitLab. XXXXXXXX” 을 체크하여 build가 push시 자동으로 이루어지도록 합니다.

당시 webhook URL정보가 출력되니 해당 정보를 기억 해 두어야 합니다.
(여기서는 http://jenkins.openlabs:8080/project/SharingTechLabs-Demo/stlapp-demo 입니다.)
5. GitLab에서 integration 메뉴에서 webhook 등록
이제 GitLab에서 Push Event가 발생되면 Jenkin의 Job을 build 하는 webhook을 생성하도록 해보겠습니다.
아래와 같이 GitLab의 해당 project에 settings→ integration 으로 이동하여 webhook을 생성합니다.

설정은 아래와 같이 두가지 방식으로 설정이 가능합니다.
1. ID/Password 방식

URL에 다음과 같은 정보가 추가되어야 합니다.
- ID/Password (ID/password를 URL에 추가하는 경우 Secret Token을 추가할 필요는 없습니다.)
- 앞선 4번에서 진행시 출력되었던 URL을 복사합니다.
(필요에 따라 URL내에 job/SharingTechLabs-Demo/job/stlapp-demo/build 와 같이 실제 호출될 URL을 적어도 무방합니다.)
2. Secret Token 방식
Jenkins 내에서 다음과 같은 설정을 수행 및 확인합니다.

여기서 Generate 버튼을 클릭하여 Secret Token을 생성하고 생성된 Token 값을 복사하여
GitLab 의 Webhook 설정화면에서 다음과 같이 추가하여 설정합니다.

여기서는 앞서 ID/Password 방식과는 다르게 URL에 ID/Password를 입력하지 않습니다.
[참고]
참고로 다음과 같은 이슈에 직면할 수 있습니다.

GitLab은 기본적으로 외부로 나가는 연결도 제한할수 있어 GitLab에서 아래 설정상에 Whitelist를 추가해야합니다.

또한 아래와 같은 에러가 다시 발생된다면

이번엔 Jenkins에서 아래 설정을 해제해야 합니다.

이후 아래와 같이 Test를 수행해보면 정상호출됨을 확인할 수 있습니다.
