Jenkins 장애 대응 및 트러블슈팅
1️⃣3️⃣ Jenkins 장애 대응 및 트러블슈팅
1️⃣ Jenkins Service 다운 문제 해결
Jenkins 서비스가 다운되면 먼저 시스템의 상태를 점검하고 원인을 찾아야 합니다. 서비스가 다운된 원인은 여러 가지가 있을 수 있으며, 가장 일반적인 원인으로는 메모리 부족, 디스크 공간 부족, 또는 잘못된 설정 등이 있습니다.
1.1. 서비스 상태 점검
-
Jenkins 로그 확인:
/var/log/jenkins/jenkins.log
에 기록된 오류 메시지를 통해 문제를 파악할 수 있습니다.- Jenkins가 시작되지 않으면, 로그 파일에서 특정 오류 메시지를 확인하고 이를 해결해야 합니다.
tail -f /var/log/jenkins/jenkins.log
-
서비스 재시작:
- Jenkins 서비스가 중단된 경우, 서비스 재시작을 시도해 볼 수 있습니다.
sudo systemctl restart jenkins
-
디스크 사용량 확인:
- 디스크가 가득 차면 Jenkins 서비스가 다운될 수 있습니다. 디스크 사용량을 확인하고 불필요한 파일을 삭제합니다.
df -h
2️⃣ Pipeline 실행 오류 분석 (exit code, stderr)
Pipeline 실행 중 발생하는 오류는 주로 exit code나 stderr를 통해 확인할 수 있습니다. 오류 코드와 오류 메시지를 분석하여 문제를 해결합니다.
2.1. Exit Code 분석
-
Jenkins에서 빌드가 실패하면 exit code가 발생합니다. 일반적으로 exit code 0은 성공을 의미하고, 1 이상은 실패를 나타냅니다. 이때, stderr에서 오류 메시지를 확인할 수 있습니다.
예시:
script { sh ''' echo "Building project..." exit 1 # Failure ''' }
-
Exit Code 1은 일반적인 실패 코드이며, 이 경우 stderr에서 보다 구체적인 오류 메시지가 기록됩니다. 이를 통해 무엇이 잘못되었는지 파악할 수 있습니다.
2.2. stderr 출력 확인
-
stderr는 실행 중 발생한 오류 메시지를 출력합니다. 빌드 실패 시, 해당 메시지를 분석하여 문제의 원인을 찾아 해결합니다.
echo "Error: Missing dependency!" >&2
3️⃣ Git Checkout 오류 해결 (403 Forbidden, 403 Authentication Required)
Git을 체크아웃할 때 발생하는 403 오류는 인증 관련 문제일 가능성이 큽니다. GitHub 또는 GitLab에서 인증이 제대로 이루어지지 않았을 때 발생할 수 있습니다.
3.1. Git 인증 설정 확인
-
SSH 키를 사용하는 경우, Jenkins에서 사용 중인 SSH 키가 Git 서버에 등록되어 있는지 확인합니다.
- Jenkins의 SSH 키를 Git 서버에 등록합니다.
- Git Plugin을 통해 Jenkins에서 Git 리포지토리에 접근할 수 있도록 설정합니다.
3.2. GitHub Personal Access Token 사용
- **GitHub Personal Access Token (PAT)**을 생성하여 username:token 형식으로 인증을 진행할 수 있습니다. PAT을 Jenkins의 Credentials에 등록하여 사용할 수 있습니다.
3.3. Jenkins Credentials 확인
- Manage Jenkins → Manage Credentials에서 Git credentials가 올바르게 설정되어 있는지 확인합니다.
4️⃣ Webhook 문제 해결 (403 No valid token, 404 Not Found)
Webhook 설정 오류는 Jenkins와 외부 서비스(예: GitHub, GitLab) 간의 통신 문제로 발생할 수 있습니다. 주로 403 또는 404 오류가 발생하는데, 이는 토큰 문제나 잘못된 URL로 인해 발생합니다.
4.1. Webhook URL 확인
-
Webhook URL이 정확한지 확인합니다. Webhook URL은 Jenkins 서버 주소와 **/github-webhook/**와 같은 추가 경로를 포함해야 합니다.
예시:
http://your-jenkins-server/github-webhook/
4.2. 유효한 Token 확인
- Secret Token을 설정하여 외부에서 발생하는 요청이 Jenkins에 유효한 요청인지 확인합니다. GitHub에서 Webhook을 설정할 때 Secret Token을 입력하고, Jenkins의 해당 Webhook 설정에서 이를 확인합니다.
5️⃣ OOM (Out of Memory) 문제 해결 (JVM Heap Dump, GC Logs)
Out of Memory (OOM) 문제는 Jenkins가 메모리를 모두 소모하여 발생하는 문제입니다. 주로 JVM Heap 설정을 통해 메모리를 조정할 수 있습니다.
5.1. JVM Heap Dump 설정
-
Jenkins의 JVM Heap 크기를 늘려야 할 수 있습니다.
/etc/default/jenkins
파일을 수정하여 JVM 옵션을 설정합니다.JENKINS_JAVA_OPTIONS="-Xmx2g -Xms512m"
5.2. GC Logs 확인
-
Garbage Collection (GC) 로그를 통해 메모리 누수나 불필요한 객체 생성 등을 확인할 수 있습니다.
- GC 로그를 활성화하려면 JVM 옵션에
-Xloggc:/var/log/jenkins/gc.log
를 추가합니다. - GC 로그를 분석하여 메모리 관리가 잘 되고 있는지 확인합니다.
예시:
-Xloggc:/var/log/jenkins/gc.log
- GC 로그를 활성화하려면 JVM 옵션에
6️⃣ Disk Full 상태 해결 (Workspace Cleanup, Build Rotation)
디스크 공간 부족 문제는 Jenkins의 빌드가 쌓여서 발생할 수 있습니다. 이를 해결하려면 Workspace Cleanup 및 Build Rotation을 설정해야 합니다.
6.1. Workspace Cleanup
- 빌드 후 생성된 불필요한 파일을 삭제하여 디스크 공간을 확보합니다.
- Workspace Cleanup Plugin을 사용하여 빌드가 끝난 후 자동으로 작업 공간을 청소할 수 있습니다.
6.2. Build Rotation 설정
-
Build Discarder 기능을 활용하여 오래된 빌드를 자동으로 삭제할 수 있습니다.
- 각 Job의 Build Discarder를 설정하여 특정 조건에서 빌드를 삭제하도록 합니다.
- 예를 들어, 마지막 10번의 빌드만 유지하고 나머지는 삭제하는 방법을 설정할 수 있습니다.
Max # of builds to keep: 10
위와 같은 방식으로 Jenkins에서 발생할 수 있는 다양한 장애 문제를 효과적으로 해결할 수 있습니다. 각 문제에 대해 로그 분석과 설정을 점검하여 빠르게 원인을 파악하고 해결하는 것이 중요합니다.