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과 연결할 방법을 모르기 때문이였습니다.