본문 바로가기
DevOps/배포

[EC2] 05. Gitlab + Jenkins 연동하기 (2)

by 김파치 2023. 9. 26.

어휴 포스팅이 너무 길어져서 2개로 나눴다.

 

생각보다 할게 많네요오...

 

 

Pipeline 생성 및 Webhook 연결

 

credential까지 만들었다.

 

뭐 이렇게 할게 많냐 싶겠지만 이제부터가 "찐"이다.

 

 

다시 Jenkins 홈으로 돌아가서 왼쪽의 새로운 Item을 클릭한다.

 

 

item name을 입력한다. 나는 프로젝트 명인 fitter로 넣었다!

 

 

그럼 이런 창이 나온다. 

 

 

 

스크롤을 내려서 Build Triggers를 찾는다

 

Build when a change is pushed to GitLab을 체크하고, 그 다음 옵션으로 Accepted Merge Request Events에 체크한다.

 

그러면 연결할 레포지토리에서 merge request가 발생할 때마다 빌드가 된다.

 

다른 옵션을 선택하고싶으면 그래도 된다!

 

파란색 네모는 webhook에 등록할 url이다!

 

 

그러고 스크롤을 조금 내리면 '고급' 버튼이 보인다. 그걸 클릭한다.

 

 

그리고 스크롤을 조금 내리면 secret token이 보인다. Generate 버튼을 클릭해서 Secret token을 생성한다.

 

 

 

이제 gitlab으로 간다!

 

프로젝트(레포지토리)로 이동해서 settings - webhooks로 간다

 

 

URL에 아까 위에서 봤던 파란색 네모 안의 url을 넣고 Secret token에 마찬가지로 젠킨스에서 발급받은 secret token을 입력한다.

 

바로 밑의 Trigger에는 Merge request events에만 체크한다.

 

만약 Jenkins에서 Build Triggers에 Merge 말고 다른 이벤트에도 체크를 했었다면 그것도 체크한다.

 

나는 Merge만 했기때문에 GitLab에서도 Merge만 체크함!

 

 

스크롤을 쭉 내려서 Add webhook을 누른다!

 

 

 

그럼 아래쪽에 webhook들이 있는데 방금 내가 만든 fitter webhook의 Test를 클릭하고 Merge request events를 클릭한다.

 

 

 

페이지 제일 위에 Hook executed successfully : Http 200이 뜨면 webhook은 완료이다!

 

 

 

Pipeline 설정

 

아이고 이제 진짜 마지막이다!!

 

아까 Build Triggers에서 쭉 내리면 Pipeline이 보일 것이다.

 

만약 못찾았다면 Jenkins 홈(Dashboard) - (item) - Configuration에서 제일 밑으로 내려오면 된다.

 

그럼 Script 오른쪽에 select box에서 GitHub + Maven을 선택한다.

 

그러면 script template이 나타난다.

 

Script 샘플이 띄워지는데 우린 이걸 기반으로 Script를 작성할 것이다.

 

그 전에 왼쪽 하단의 Pipeline Syntax를 클릭한다. 

 

 

그럼 요로코롬 화면이 나오는데 Sample Step에서 git: Git을 선택한다.

 

 

 

 

그런 다음 다시 GitLab 프로젝트로 가서 URL을 복사해온다.

 

 

복사한 url을 Repository URL에 붙여넣고,  Credentials에 제일 처음 만든 credential을 선택한다. (username w. password 그거)

 

그리고 Generate Pipeline Script를 클릭한다.

 

 

그럼 다음과 같이 snippet이 생성된다.

 

이걸 복사해서 다시 pipeline으로 돌아가자!

 

 

 

나는 파이프라인을 git clone - build - deploy의 순으로 설계하였다.

 

그래서 stage를 'clone', 'build', 'deploy'로 나누었다.

 

clone 에 아까 생성한 snippet을 추가하였다.

 

pipeline {
    agent any

    stages {
        stage('clone') {
            steps {
                echo 'Start cloning fitter...'
                git credentialsId: '--------------------', url: '-----------------------------'
                echo 'Clone finished!'
            }
        }
        
        stage('build') {
            steps{
                echo 'Start building fitter...'
                sh 'ls'
                sh 'cd fitter/backend/ && chmod +x ./gradlew && ./gradlew clean build'
                sh 'cp fitter/backend/build/libs/fitter-0.0.1-SNAPSHOT.jar /var/www/backend'
                echo 'Build finished!'
            }
        }
        
        stage('deploy'){
            steps{
                echo 'Start deploying...'
                sh 'docker stop backend || true'
                sh 'docker rm backend || true'
                sh 'docker rmi backend || true'
                sh 'docker run --name backend -d -v /var/www/backend/:/app --network host openjdk:11 java -jar /app/fitter-0.0.1-SNAPSHOT.jar'
                echo 'Deploy finished!'
            }
        }
    }
}

 

 

그리고 저장을 누르면 clone, build, deploy를 하는 job을 가지는 파이프라인이 생긴다.

 

 

그럼 빌드 테스트를 해보쟈!

 

왼쪽의 지금 빌드를 누르면 성공적으로 됨을 알 수 있다!

 

(마지막의 post actions는 다음 포스팅에서 - ★)

 

 

깃랩에서 push하고 merge하면 자동적으로 배포가 되는 것도 확인할 수 있다!

 

그럼 배포 진짜진짜 끝~!~!~!

'DevOps > 배포' 카테고리의 다른 글

[EC2] 05. Gitlab + Jenkins 연동하기 (1)  (0) 2023.09.26
[EC2] 04. EC2에 Jenkins 설치하기  (0) 2023.09.25
[EC2] 03. MySQL 설치  (0) 2023.09.25
[EC2] 02. Docker 설치(feat. chatGPT)  (0) 2023.09.25
[EC2] 01. EC2 세팅 (NginX, SSL)  (0) 2023.09.25