티스토리 뷰
Jenkins의 기능은 무궁무진한것 같다. 아직 빙산의 일각밖에 모른다는 생각도 든다. 이번에 포스팅할 내용은 Jenkins에서 제공하는 REST API를 사용해 Jenkins의 Job을 생성, 실행, 삭제, 결과조회 등을 해보는 것이다. Jenkins의 Job을 외부에서 실행시키는건 어떤 경우가 있을까? 정말 다양한 용도로 활용할 수 있겠지만 필자의 경우는 기존에 web에서 ondemand 형식으로도 동작하던 batch를 Jenkins에서 관리하게 되었고 이를 Jenkins의 REST API를 통해서 호출을 하는것이 목적이다.
Jenkins에서의 설정
API 통신을 하기 위한 Token 발행
Jenkins 메뉴 > 사람 > token 발행할 user 명 > 설정
설정에 들어가면 API Token 설정을 할 수 있는 메뉴가 있고 적당한 text를 입력 후 Add new Token 을 눌러서 Token을 발행한다. 그리고 이 값을 잘 저장해 놓도록 한다.
Jenkins에서의 설정은 모두 끝이 났다. 사용자 token 정보만 생성해내면 된다. 아주 간단하다.
Jenkins 원격 빌드
위에서 계정정보에 대한 token 값을 받았다면 이것을 이용해서 Jenkins의 Job을 수행할 수 있다.
cmd 창을 열고 다음과 같이 작성해보자.
> curl -X POST http://localhost:8080/job/failure-job/build --user admin:1129e4fbb4d66595ee59824a41d9d6a1cd -v
http://[jenkins URL]/job/[job name]/[jenkins에서 할일 (build, create..)] --user [jenkins계정]:[token]
이렇게 넣고 실행을 시키면
위와 같이 실행이 되는것을 확인할 수 있고 실제 Jenkins에 들어가서 해당 job을 살펴봐도 실행이 된것을 확인할 수 있다.
REST API 사용방법
위에서 Job을 build 하는것 외에 다른 일들에 대해서도 REST API를 제공한다.
Job 생성 [POST]
http://[jenkins url]/createItem?name=[job name]
Job 조회 [GET]
http://[jenkins url]/job/[job name]/api/json or xml
Job 빌드 수행 [POST]
http://[jenkins url]/job/[job name]/build
Job 빌드 결과 조회 [GET]
http://[jenkins url]/job/[job name]/[build number]/api/json or xml
Job 빌드 결과 조회 - 마지막 성공 빌드 [GET]
http://[jenkins url]/job/[job name]/lastStableBuild/api/json or xml
이중 마지막 성공 빌드에 대해서 한번 더 수행하는 모습을 보자면
C:\Users\oing>curl -X GET http://localhost:18080/job/success-job/lastStableBuild/api/json --user admin:1129e4fbb4d66595ee59824a41d9d6a1cd -v
Note: Unnecessary use of -X or --request, GET is already inferred.
* Trying ::1...
* TCP_NODELAY set
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 18080 (#0)
* Server auth using Basic with user 'admin'
> GET /job/success-job/lastStableBuild/api/json HTTP/1.1
> Host: localhost:18080
> Authorization: Basic YWRtaW46MTEyOWU0ZmJiNGQ2NjU5NWVlNTk4MjRhNDFkOWQ2YTFjZA==
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 31 Dec 2020 01:58:49 GMT
< X-Content-Type-Options: nosniff
< X-Jenkins: 2.249.2
< X-Jenkins-Session: 0e6ac1ef
< X-Frame-Options: deny
< Content-Type: application/json;charset=utf-8
< Content-Length: 644
< Server: Jetty(9.4.30.v20200611)
<
{"_class":"hudson.model.FreeStyleBuild","actions":[{"_class":"hudson.model.CauseAction","causes":[{"_class":"hudson.model.Cause$UserIdCause","shortDescription":"Started by user admin","userId":"admin","userName":"admin"}]},{},{},{}],"artifacts":[],"building":false,"description":null,"displayName":"#3","duration":5023,"estimatedDuration":6710,"executor":null,"fullDisplayName":"success-job #3","id":"3","keepLog":false,"number":3,"queueId":127,"result":"SUCCESS","timestamp":1603357730518,"url":"http://localhost:18080/job/success-job/3/","builtOn":"","changeSet":{"_class":"hudson.scm.EmptyChangeLogSet","items":[],"kind":null},"culprits":[]}* Connection #0 to host localhost left intact
대략 이런 모습으로 요청에 대한 결과를 마지막줄에 있는 json string or xml string으로 받아볼 수 있다.
많이 사용되는것은 이정도이고 더 많은 정보를 원한다면 Jenkins의 우측 하단에 보면(혹은 http://[jenkins url]/api) 로 들어가보면 더 자세한 API 사용법에 대해 기술이 되어 있다. (사실 더 자세한지는 모르겠다..)
끝!
'CI,CD > Jenkins' 카테고리의 다른 글
Jenkins 권한관리 KeyCloak 연동해서 하기 (1) (0) | 2021.01.08 |
---|---|
Jenkins 로그인 KeyCloak으로 하기 (2) | 2021.01.07 |
Jenkins와 Slack 연동하기 - 빌드결과 알림받는 방법 (0) | 2020.12.22 |
Jenkins에서 jacoco.exec 파일 수집하기 (with sshpass) (0) | 2020.11.23 |
Jenkins에서 application log를 tail -f (실시간)로 보기 (0) | 2020.11.13 |