Jenkins의 기능은 무궁무진한것 같다. 아직 빙산의 일각밖에 모른다는 생각도 든다. 이번에 포스팅할 내용은 Jenkins에서 제공하는 REST API를 사용해 Jenkins의 Job을 생성, 실행, 삭제, 결과조회 등을 해보는 것이다. Jenkins의 Job을 외부에서 실행시키는건 어떤 경우가 있을까? 정말 다양한 용도로 활용할 수 있겠지만 필자의 경우는 기존에 web에서 ondemand 형식으로도 동작하던 batch를 Jenkins에서 관리하게 되었고 이를 Jenkins의 REST API를 통해서 호출을 하는것이 목적이다. Jenkins에서의 설정 API 통신을 하기 위한 Token 발행 Jenkins 메뉴 > 사람 > token 발행할 user 명 > 설정 설정에 들어가면 API Token 설정을..
Jenkins의 다양한 기능중 이번에는 Slack과 연동해서 배포 실패 시 또는 배치 수행중 문제가 생겼을 경우 알림을 보내주는 기능에 대해 알아보겠다. 내가 직접 Jenkins에서 빌드 버튼을 눌러서 실패를 하는 경우에는 바로 인지가 가능하고 조치를 하겠지만 스케쥴링 되어있는 Job을 수행중에 문제가 생긴 경우에는 이런 알림 기능이 필요하다. 가장 보편적으로 알려진 Jenkins의 알림은 Email이 있고 요즘에는 Slack을 통한 알림도 많이 사용하는 추세다. Jenkins와 Slack을 연동하려면 물론 두곳 모두에서 설정이 필요하며 설정이 어렵지는 않다. 하나씩 살펴보자. ◈ Slack 에서의 설정 일단 Slack에서는 어떤 설정이 필요한지 알아보자. ▶ 채널 생성 Jenkins Job 수행결과를 ..
jacoco를 사용하여 소스코드에 대한 동적 분석을 한 결과물의 이름을 jacoco.exec로 사용하고 있다. 이 파일은 빌드서버인 jenkins가 설치된 곳으로 이동이 되어서 분석이 되어야 한다. jacoco의 분석은 sonarqube에서도 할수 있지만 jenkins에서 하기로 했다. 대략적인 그림은 이렇다. 여러개의 application이 있고 여기에서 추출된 결과인 jacoco.exec 파일을 jenkins의 소스와 클래스파일이 위치한 곳에 전송하고 싶다. 이런식으로 jenkins가 파일을 받는 경우 이를 위한 여러가지 방법이 있다. 제목은 이렇게 뽑았는데 실제로는 sshpass를 사용해서 파일을 전송하는 것 정도가 정확할것 같다. 첫번째로는 SSH key를 이용을 하는 방법이다. 이 방법의 장점은..
프로젝트에서는 보통 서버에 들어가서 작업을 할수 있는 사람과 서버에 대한 접근권한이 없는 개발자들이 있다. 개발자들이 개발서버에 어플리케이션을 올렸을때 로그를 확인하고 싶어하는 경우가 있다. 그럴때 매번 서버에 접근가능한 사람이 들어가서 직접 확인시켜주는것보다는 개발자가 서버에 들어가지 않고 Jenkins를 통해서 로그를 볼수 있게 해주면 된다. 방법은 다음과 같다. 설정방법 Jenkins > Plugin Manager Build Timeout 이라는 plugin을 설치한다. 이건 Optional 한 부분이지만 그래도 미연의 사고를 방지하고자 일단은 설치! 설치가 다 되었으면 새로운 Job을 하나 만든다. FreeStyle Job으로 생성한다. 밑으로 내리다 보면 plugin이 설치가 잘 되었으면 위와 ..
시간이 10분 이상 걸리는 Batch Job이 있고 이를 Jenkins를 통해서 실행을 하려고 한다. 분명히 Batch가 수행되며 data는 모두 성공적으로 들어갔고 정상적으로 종료된듯 보인다. 하지만 Jenkins Job의 상태는 Unstable이다. SSH: Disconnecting configuration [batch_001] ... ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 213,127 ms] Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE 로그를 꼼꼼히 보니 위와 같은..
Parameterized Trigger를 사용하면 다양한 Job간의 연계작업을 할 수 있다. 전에 살펴본대로 후속 job으로 parameter 값도 넘길 수 있고 후속 job으로 여러가지 job 동시에 실행시키는것도 가능하다. Parameterized Trigger를 사용하면 아주 간단하게 실행시킬 수 있다. bjob이 실패했을때 다음 job을 cjob과 djob이 동시 실행이 되도록 하고 싶다. bjob의 하단에 빌드 후 조치 부분에 Trigger parameterized build on other projects 를 선택한다. 위와 같이 빌드가 실패(Failed)를 했을때 어떤 프로젝트(cjob, djob)를 수행할것인지 명시해주면 된다. 여러가지 job을 동시에 실행시키고 싶은 경우에는 위처럼 , ..
Parameterized Trigger 를 사용하면 후속 작업을 지정 및 수행할 수 있을뿐만이 아니고 현재 job의 param값, 넘기고 싶은 변수값도 넘겨줄 수 있다. 다음은 bjob에서 cjob으로 param값을 넘기는 예제이다. Parameterized Trigger Plugin 설치 방법은 여기를 참고하도록 한다. 일단은 bjob과 cjob에 각각 위와 같이 String Parameter로 값을 넣어준다. 하나씩 해도 되지만 여러개의 param을 보낸다고 가정하고 두개씩 보내는걸로 테스트 환경을 꾸렸다. cjob 설정 및 수행결과 cjob만 단독으로 수행을 한 결과이다. 당연히 위에서 param을 설정한대로 testparam1, testparam2에 대한 출력을 해준다. 설정한대로 cjob par..
Jenkins를 사용하다가 실패한 Job에 대해서는 어떻게 처리를 하는게 가장 좋을까 고민을 하고 있다. 전에 다뤘던 pipeline을 사용해서 실패한 job에 대한 처리를 하는 방법도 있지만 이건 pipeline job을 한셋 더 만들어야 하는 불편함이 있었다. (물론 안만들고도 script에 다 때려 박는 방법도 있지만..) 그러던 중 Parameterized Trigger plugin를 사용하여 아주 간단하게 고민을 해결할 수 있었다. 사용법에 대해서 알아보자. Parameterized Trigger plugin 설치 Jenkins 관리 > 플러그인 관리 > Parameterized Trigger 검색하여 Parameterized Trigger plugin 설치를한다. 설치가 되었다면 사용할 수 있..