티스토리 뷰
Jenkins에서 빌드를 하던지 배치를 돌리던지 할때 오류가 발생을 할 수 있다. 이때 오류에 대해서 즉각 noti를 받고 싶은 경우라면 일반적으로는 Jenkins와 연동이 되는 email noti를 받던지 slack을 통해서 noti를 받을 수 있다. 하지만 이렇게 하지 못하는 상황도 있을수 있다. 폴스타(polestar) 라는 솔루션을 사용해서 error에 대한 noti를 받고 싶다는 요구사항이 있었다. 폴스타는 여러가지 기능이 있지만 특정 경로에 특정 파일이 생성되면 그걸 인지하고 알려주는 기능도 있어서 Jenkins에서 오류가 발생하면 특정 위치에 오류 내용을 담은 로그파일을 생성해 주기로 하였다.
가장 먼저 할일은 Jenkins에서 job을 돌리다가 오류가 난걸 캐치해 내는것이다.
Jenkins의 통합로그는 jenkins설치경로/logs/jenkins.log 파일에 기록이 된다. 이 파일에는 job의 성공 실패 유무와 상관없이 모든 job의 결과를 나타낸다. 이곳에서 job의 수행결과가 FAILURE 인것을 찾는다. jenkins.log 파일은 다음과 같은 모습으로 출력이 된다.
testmail 이라는 jenkins job이 FAILURE 이고 그 다음 실행된 JenkinsFailLogging이라는 job은 SUCCESS 이다.
이걸 파싱하여 실패한 job 이름을 추출해내보자.
#! /bin/bash
jobstatus=$(cat /젠킨스설치경로/jenkins.log | tail -1 | cut -f 3 -d':')
if [ "${jobstatus:1}" == "FAILURE" ];then
jobname=$(cat jenkins.log | tail -1 | cut -f 2 -d':' | cut -f 1 -d'#')
trimjobname=${jobname:1:-1}
echo ${trimjobname}" is Failed"
cat /젠킨스설치경로/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log
cat /젠킨스설치경로/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log >> /logs/jenkins/error_`date +%Y%m%d%H%M`_"${trimjobname}".log
else
echo "success"
fi
이런식으로 shell script를 작성한다.
jobstatus는 로그파일에서 FAILURE이냐 SUCCESS 냐를 추출하여 담는 변수이고 이 결과에 따라 FAILURE이면 해당 job 이름을 추출하여 Jenkins의 job별 로그파일을 읽어와서 내가 쌓고 싶은 위치에 리네임을 해서 복사해 넣어주는 로직이다. 즉 오류가 나면 /젠킨스설치경로/data/jobs/실패한job/builds/lastFailedBuild/log 이곳에서 로그를 찾기 위한 스크립트라고 보면 된다. 성공을 하면 success 만 찍어주고 끝난다.
위와 같은 스크립트 작성이 완료가 되었으면 실행권한을 줘야 한다.
위의 스크립트를 jenkinsError.sh 라고 명명하였고 다음과 같이 jenkinsError.sh가 있는 곳에서 실행한다.
chmod 755 jenkinsError.sh
이제 Jenkins에서 이렇게 오류로 떨어뜨릴 job들에 대해서 위의 jenkinsError.sh를 수행시킬수 있도록 해줘야한다.
일단은 위의 jenkinsError.sh 를 실행시키는 job을 하나 생성한다. (Build > Execute Shell)
/jenkinsError.sh 스크립트생성위치/jenkinsError.sh
이 job은 이 명령어 하나만 실행시키는 것이라고 보면 된다. 이것의 Job 이름은 JenkinsFailLogging 이라고 해보자.
마지막으로 실제 오류로그를 보고 싶은 job에서 위와 같이 수정을 해준다. 빌드 후 조치 > Build other projects에서 방금 만든 job인 JenkinsFailLogging을 입력하고 Trigger even if the build fails 로 체크해준다. 실패를 했을때도 JenkinsFailLogging을 후속으로 수행하겠다는 것이다. 테스트를 해봐야 하는데 테스트가 잘 되려면은 오류로그를 보고 싶은 job을 실패하게 만들어야 한다. 실패하게된다면 위의 sh파일에 정의해 놓은것처럼
/logs/jenkins/error_`date +%Y%m%d%H%M`_"${trimjobname}".log 로 오류로그가 남을것이다.
이런 형식으로 쌓이게 되는것이고 이 파일을 열어서 안으로 들어가보면
이처럼 어떻게 오류가 났는지 알수 있다. 이 로그가 쌓이는 디렉토리를 폴스타에 등록해줘서 로그파일 생성되면 알람이 오게 설정하면 된다.
끝!
'CI,CD > Jenkins' 카테고리의 다른 글
Jenkins Pipeline 으로 Job 병렬처리하기 (0) | 2020.06.22 |
---|---|
Jenkins에서 File Choice Parameter 를 이용해 백업 파일 리스트 가져오기 (0) | 2020.06.18 |
Nexus에 deploy하고 Jenkins에서 deploy 된 목록 가지고 오기 (0) | 2020.06.11 |
Jenkins에서 Spring Batch Scheduling 하기 (0) | 2020.06.03 |
jenkins에서 svn tag를 이용해 build 하기 (0) | 2020.05.28 |