Jenkins | GitLab webhook설정
jenkins설치
https://jwinjection.tistory.com/283
Docker | Jenkins 설치
Jenkins 설치JDK 설치자신의 프로젝트에 사용되는 버전의 JDK를 설치해야합니다.# 업데이트sudo apt update# 업그레이드sudo apt upgrade# 특정 버전 목록 조회sudo apt list openjdk-[버전]*# 설치sudo apt install openjd
jwinjection.tistory.com
최종브렌치인 main 브렌치에 push를 하면
GitLab webhook 이 push이벤트를 감지한 후
업데이트 된 최신 main 브렌치를 jenkins내부로 clone 후 jar파일로 build 하는 작업을
해보도록 하겠습니다.
1. Gitlab Token발급
Gitlab페이지로 이동합니다.
Setting - Access tokens - Add new token 을 클릭합니다.

Token name : 원하는대로 적습니다.
Expiration date : 7일에서 30일 사이로 잡아주시면 됩니다.
Select scopes : 아래와 같이 체크해줍니다.
create project access token 클릭

이후 토큰을 복사해줍니다

2. Jenkins Gitlab 플러그인 설치
Jenkins 페이지로 이동합니다
Jenkins관리 - Plugins 클릭

Available plugins 탭으로 이동 후
gitlab 을 검색
GitLab 체크 후 Install 을 누릅니다.

설치완료

ssh agent도 설치

3. Jenkins GitLab API token Credentials 등록
Jenkins 페이지에서
Jenkins관리 - Security 항목 - Credentials 클릭

(global) ∨ - Add credentials 클릭

Kind는 GitLab API token 을 선택
1에서 생성한 gitlab API token 입력
원하는 ID 입력
create 클릭

완료

4. Jenkins GitLabID, PW 등록
Jenkins페이지에서
한번더 Add Credentials 를 눌러줍니다

Kind : Username with password
Username : Gitlab Username
Password : Gitlab 비밀번호
ID : Credentials id 값
Create 클릭

Create 했을때 생성된 ID (Username 아님!!!) 기억해둡니다.

5. Jenkins-GitLab 연결확인
Jenkins페이지에서
Jenkins Dashboard - Jenkins 관리 - System 클릭

밑으로 스크롤 하다보면 GitLab 영역이 나옵니다.

Connection name : 원하는대로
GitLab 주소 : 자신의 Gitlab URL
Credentials : Gitlab API token Credentials 선택
다입력하면 옆에 Test Connection 을 눌러 Success가 뜨는지 확인합니다.
이후 저장

6. Jenkins 파이프라인생성
Jenkins Dashboard에서 새로운 Item 클릭

Item 명 지정 - Pipeline 선택 - Ok
아이템 명은 프로젝트명-ci-pipline 이런식으로 작성하면 좋습니다.

7. Jenkins 파이프라인 스크립트 작성
Dashboard - 자신의 프로젝트 - Configuration - General 에 들어가 아래와 같이 체크합니다

이후 아래쪽에 있는 고급을 누릅니다.
Generate 를 눌러 Secret token 을 발급받습니다.

왼쪽 Advanced Project Options을 누르거나
더 아래쪽으로 스크롤하면 스크립트를 적는 곳이 나옵니다.

git branch : 최종배포되는 브랜치 명을 적으면됩니다
credentialsId : 4(Gitlab USERNAME,PW 등) 에서 ID값(자동지정값) 을 적어야함
url : Git프로젝트 url을 적습니다.
pipeline {
agent any
stages {
stage('Git Clone'){
steps {
git branch: '브랜치명', credentialsId: 'YourGitLabCredentialsId', url: 'https://example.com/test/Project.git'
sh 'chmod +x gradlew' // 클론 후 실행 권한 부여
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
}
}
작성 완료 후 저장 버튼을 눌러줍니다.

정리하면
"계정정보가 담긴 credentialsId를 통해 url에 접근하여 해당하는 branch를 clone해오겠다. 그리고 그 프로젝트를 build하겠다"
8. GitLab Webhook 추가
다시 Gitlab으로 넘어가 Webhook을 등록해봅시다
Settings - Webhooks - Add new webhook 을 클릭

GitLab web hook URL 과 Secret token 을 입력합니다

URL은 위 7.파이프라인 스크립트작성의 Jenkins에서 webhook URL 을 넣으시면됩니다.

Scret token 역시 그 바로 아래 고급을 눌러서 generate했던 그 토큰번호를 입력하면됩니다
Build Trigger는 아래와 같이 Push events 와 Merge request events 를 체크하면됩니다.
Push events는 Wildcard pattern을 선택하여 아래와 같이 | 로 구분하여 브렌치명을 작성하면됩니다.
저는 main 만 할거라 main만 적었습니다.
*-stable
=> -stable 로 끝나는 모든 브랜치를 의미
production/*
=> 브랜치 이름이 production/ 로 시작하는 모든 브랜치를 의미

Add webhook 버튼 을 누르면 완료입니다.

9. webhook test
옆에 있는 Test에서 Push events 를 눌러 테스트를 해봅니다

아래와같이 뜬다면 Gitlab에서 push test 이벤트를 성공적으로 보낸것입니다.

다음은 Jenkins에서 확인할 차례 입니다

초록색 체크가 뜨면 성공입니다.
안된다면 아래와같이 왼쪽 Builds 탭에 x 표시가뜹니다
Console Output 버튼을 눌러 에러 로그를 확인 후 직접 해결해야합니다.

그럼 clone 된 경로는 어디고 build된 경로는 어디일까요?
docker로 jenkins를 띄웠으니 jenkins컨테이너로 접속합니다
sudo docker exec -it jenkins bash
아래 경로에 클론된 프로젝트가 저장이 됩니다
/var/jenkins_home/workspace/{Job_Name}/
cd /var/jenkins_home/workspace/
그 프로젝트 폴더 안에서 아래 경로로 들어가면 build된 jar파일을 확인할 수 있을것입니다.
cd build/libs
10. 에러사항
1) ./gradlew permission denied

원인
Jenkins가 gradlew 파일을 실행할 권한이 없기때문입니다.
해결
Jenkins 웹에서 파이프 라인 스크립트 작성시 sh 'chmod +x gradlew' 가 없어서 일겁니다.
잘 작성되어있는지 확인해주세요
pipeline {
agent any
stages {
stage('Git Clone'){
steps {
git branch: '브랜치명', credentialsId: 'YourGitLabCredentialsId', url: 'https://example.com/test/Project.git'
sh 'chmod +x gradlew' // 클론 후 실행 권한 부여
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
}
}
2) compileTestJava FAILED
원인
gradlew build시 test소스 까지 같이 빌드되다 보니
개발시 테스트쪽을 저 처럼 건들다 만 경우 에러가 날 가능성이 있습니다.
해결
build 시 테스트는 제외시켜버리자!
Jenkins 웹에서 파이프라인 작성시
build 뒤에 -x test 를 추가합니다.
pipeline {
agent any
stages {
stage('Git Clone'){
steps {
git branch: '브랜치명', credentialsId: 'YourGitLabCredentialsId', url: 'https://example.com/test/Project.git'
sh 'chmod +x gradlew' // 클론 후 실행 권한 부여
}
}
stage('Build') {
steps {
sh './gradlew build -x test'
}
}
}
}
'DevOps > 🛠️ CICD' 카테고리의 다른 글
| React 배포 및 CICD & 백엔드연동 (1) | 2025.05.15 |
|---|---|
| CICD | Webhook을 이용한 Blue-Green 배포 구현 (2) | 2024.10.05 |
| DuckDNS로 무료 도메인 등록하기 (0) | 2024.10.01 |
| 윈도우환경에서 nginx활용한 초간단 CICD 구현(2) (0) | 2024.09.06 |
| 윈도우환경에서 nginx활용한 초간단 CICD 구현(1) (1) | 2024.09.05 |