Jenkins | GitLab webhook설정
최종브렌치인 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 을 누릅니다.
설치완료
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 비밀번호
Create 클릭
Create 했을때 생성된 ID (Username 아님!!!) 기억해둡니다.
5. Jenkins-GitLab 연결확인
Jenkins페이지에서
Jenkins Dashboard - Jenkins 관리 - System 클릭
밑으로 스크롤 하다보면 GitLab 영역이 나옵니다.
Connection name : 원하는대로
GitLab 주소 : 자신의 Gitlab URL
Credentials : 아까 생성한 Gitlab 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 을 클릭
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' 카테고리의 다른 글
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 |
리버스 프록시란? (0) | 2024.09.05 |