에러일기

webhook event push success but jenkins trigger not working

솜사탕코튼 2025. 2. 23. 18:14

Github Webhook 설정은 정상적으로 되었으나, jenkins trigger가 작동하지 않아서 문제였습니다.

 

pipeline scm X

 

pipeline script를 사용했다는 점

 

문제의 pipeline script는 다음과 같습니다.

pipeline {
    agent any
    
    triggers { 
        githubPush() // 📌 GitHub Webhook을 통한 자동 빌드 트리거
    }

    stages {
        // 1️⃣ Git Clone (현재 디렉토리에)
        stage('Checkout') {
            steps {
                sh '''
                    echo "[INFO] 기존 Jenkins 작업공간 정리"
                    sudo chown -R jenkins:jenkins .
                    sudo chmod -R 777 .
                    
                    # .gradle 폴더 강제 삭제
                    sudo rm -rf .gradle || true
                    
                    rm -rf ./*  # 현재 디렉토리 안의 모든 파일 삭제
        
                    echo "[INFO] Git에서 최신 코드 가져오기"
                    if [ -d ".git" ]; then
                        echo "[INFO] 기존 Git 저장소가 존재하므로 최신 코드로 업데이트"
                        git reset --hard
                        git pull origin main
                    else
                        echo "[INFO] 새로운 Git Clone 실행"
                        git clone -b main https://github.com/beginner0107/Foody.git .
                    fi
        
                    chown -R jenkins:jenkins .
                '''
            }
        }
... 다음 작업

 

위의 방식은 수동이였고, githubPush()를 했을 때 어떤 repository에 trigger 이벤트를 발생시킬지 지정을 해두었어야 했습니다.

 

웹 훅 로그를 확인해봤습니다.

sudo cat /var/log/jenkins/jenkins.log | grep webhook

 

O GitHub Webhook이 200 OK 응답을 받음
O Jenkins에서 Received PushEvent 로그가 출력됨
O 수동으로 curl -X POST http://localhost:8080/github-webhook/ 실행 시 빌드 정상 수행됨
X Webhook이 자동으로 트리거되지 않음
X Jenkins 로그 파일 /var/log/jenkins/jenkins.log이 존재하지 않음

즉, Webhook이 Jenkins에 도달하지만, 자동 트리거가 안 되고, 로그도 없는 상태였습니다.

 

sudo journalctl -u jenkins --no-pager --since "10 minutes ago"
 INFO        o.j.p.g.w.s.DefaultPushGHEventSubscriber#onEvent: Received PushEvent for https://github.com/beginner0107/Foody from 140.82.115.45 ⇒ http://map-sv.site:8080/github-webhook/

 

다음과 같이 이벤트를 정상적으로 수신한 것 까지 확인했습니다.

 

https://medium.com/@sneakstarberry/jenkins-git-credential-%EB%93%B1%EB%A1%9D-aff572de329e

 

Jenkins git-credential 등록

git repo에서 파일을 다운 받을 수 있어야하는 credential이 안된다면 시작도 못하게 됩니다.

medium.com

위의 설정도 추가해주고

 

그래도 해결되지 않았습니다.

 

최종 해결책으로는 다음과 같습니다.

        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/beginner0107/Foody.git'
            }
        }
  • "Pipeline script" 방식에서는 git 명령을 Checkout 단계에 추가해야 합니다.
  • "Pipeline script from SCM" 방식에서는 Jenkins UI에서 Git을 설정하면 Webhook이 자동으로 연결됩니다.
  • 즉, 현재 "Pipeline script" 방식에서 Webhook이 제대로 작동하지 않는 이유는 Git 저장소가 명시되지 않아서 Jenkins가 Webhook과 연결할 방법을 모르기 때문이였습니다.