[TIL] API를 사용하자 - api4jenkins

P Yun·2022년 12월 27일
0

TIL

목록 보기
3/3

잠깐, API 찾아보셨나요?

최근 Jenkins 관련 작업을 자동화 해야할 일이 있어 Python으로 자동화 코드를 작성중이었다.

처음에는 Jenkins api의 존재를 몰라 Web Crawling, DB Query 등의 방법을 고려하고 있었다.

그러던 중 Jenkins의 작업들은 Groovy에서 객체처럼 취급해 손쉽게 작업할 수 있는데, 혹시 Python Module중 그런 것은 없을까 하고 구글에 검색을 해보니 이게 웬 걸, 이미 손쉽게 사용할 수 있는 API가 많이 나와있었다.

https://pypi.org/project/api4jenkins/
이 API를 사용해 개발 시간을 훨씬 단축할 수 있을 것으로 보인다.

api4jenkins 사용법

다른 Jenkins API들도 많이 있지만 api4jenkins를 고른 이유는 문서화가 잘 되어있기도 하고 사용법이 다른 API들에 비해 직관적이고 정확히 필요했던 기능들을 제공해 주어서이다.

api4jenkins의 사용법은 매우 직관적이다.

기본적으로 Jenkins의 주소와 로그인 계정을 파라미터로 넘겨 인스턴스를 만들어 주면 Jenkins에서 할 수 있는 거의 모든 것들을 객체지향적으로 수행할 수 있다.

>>> from api4jenkins import Jenkins
>>> j = Jenkins('http://127.0.0.1:8080/', auth=('admin', 'admin'))
>>> j.version
'2.176.2'
>>> xml = """<?xml version='1.1' encoding='UTF-8'?>
... <project>
...   <builders>
...     <hudson.tasks.Shell>
...       <command>echo $JENKINS_VERSION</command>
...     </hudson.tasks.Shell>
...   </builders>
... </project>"""
>>> j.create_job('freestylejob', xml)
>>> job = j.get_job('freestylejob')
>>> print(job)
<FreeStyleProject: http://127.0.0.1:8080/job/freestylejob/>
>>> print(job.parent)
<Jenkins: http://127.0.0.1:8080/>
>>> print(job.jenkins)
<Jenkins: http://127.0.0.1:8080/>
>>> import time
>>> item = job.build()
>>> while not item.get_build():
...      time.sleep(1)
>>> build = item.get_build()
>>> print(build)
<FreeStyleBuild: http://127.0.0.1:8080/job/freestylejob/1/>
>>> for line in build.progressive_output():
...     print(line)
...
Started by user admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/freestylejob
[freestylejob] $ /bin/sh -xe /tmp/jenkins2989549474028065940.sh
+ echo $JENKINS_VERSION
2.176.2
Finished: SUCCESS
>>> build.building
False
>>> build.result
'SUCCESS'

이 외에 다른 코드 조각과 Reference들은 아래 문서 페이지에서 확인할 수 있다.
https://api4jenkins.readthedocs.io/en/latest/

마치며

API를 적절히 사용하면 개발시간이 줄어들 뿐만 아니라 새로운 코드를 작성하며 발생하는 여러가지 문제들까지 미연에 방지할 수 있다.

안정적인 API를 잘 골라 프로젝트에 활용하도록 하자.

profile
Record the facts, analyze and present.

0개의 댓글