
API 개요
이메일 또는 슬랙에서 "승인하기", "반려하기" 버튼을 누르면
잠시 Pause가 된 젠킨스 파이프라인을
다시 진행시킬 것인지, 아니면 진행을 멈출 것인지 젠킨스 REST API를 날려 줄
파이썬 Flask API를 만들어 줄 것입니다.
소스코드
- requests, flask 패키지 설치가 필요합니다. (pip install flask requests)
- 변수 설명
- approval : 승인하기이면 yes를, 반려하기이면 no를 API에 넘겨줄 예정입니다.
- jobName : 파이프라인 이름입니다. 젠킨스 파이프라인 스크립트에서 자신의 파이프라인 이름을 가져올 수 있습니다.
- buildNumber : 진행 중인 파이프라인의 빌드 번호입니다. 젠킨스 파이프라인 스크립트에서 현재 진행 중인 빌드 번호를 가져올 수 있습니다.
- userName : 젠킨스 유저명입니다. 승인만을 위한 별도의 계정을 만드는 것이 좋습니다. 다른 계정에서는 승인을 못하게 하기 위함입니다.
- password : 사용할 유저에 대한 API KEY 입니다. 젠킨스 유저 setting 에서 KEY를 생성할 수 있습니다.
- inputId : WFAPI input ID입니다. (http://젠킨스IP:PORT/job/잡네임/빌드번호/wfapi 을 호출해서 반환되는 json을 한번 살펴보시는 것을 추천드립니다. 여기서 Input ID도 볼 수 있습니다.)
from flask import Flask, request
import requests
from requests.auth import HTTPBasicAuth
app = Flask(__name__)
@app.route("/approval")
def approval():
approval = request.args.get('approval') # 승인(yes) Or 반려(no)
jobName = request.args.get('job_name') # 파이프라인 이름
buildNumber = request.args.get('build_number') # 빌드 넘버
userName = "" # 젠킨스 유저명
password = "" # 젠킨스 API Key
inputId = "" # 젠킨스 WFAPI Input ID
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
}
form_data = "json=%7B%22parameter%22%3A%20%5B%7B%22name%22%3A%20%22APPROVE%22%2C%20%22value%22%3A%20%22" + approval + "%22%7D%5D%7D"
domain = 'http://젠킨스IP:PORT/'
url = domain + 'job/' + jobName + '/' + buildNumber + '/wfapi/inputSubmit?inputId=' + inputId
response = requests.post(url, headers=headers, auth=HTTPBasicAuth(userName, password), data=form_data)
if response.status_code == 200:
if approval == "yes":
return {
"text": "Approve"
}
else:
return {
"text": "Reject"
}
else:
return {
"text": "Fail"
}
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000', debug=True)
서비스 실행
- 테스트 실행
python 파일명.py
- 운영 실행 (도커 uwsgi 실행에 관심 있으시면, 아래 링크 참고 부탁드립니다.)
https://onestone-note.tistory.com/149
[flask + uwsgi] Dockerfile
1. Flask 파일 (application.py) from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello World!" 2. Flask로 만든 application 실행시키는 파일 (wsgi.py) from application import app if __name__ == "__main__": app.run
onestone-note.tistory.com
'인프라 > Jenkins' 카테고리의 다른 글
Jenkins Redmine 이슈 티켓 연동 (Redmine REST API, Jenkins input multiselect) (0) | 2023.05.29 |
---|---|
Jenkins 배포 승인 프로세스 구성 3 - Jenkins 파이프라인 (0) | 2023.05.28 |
Jenkins 배포 승인 프로세스 구성 1 - 개요 (0) | 2023.05.21 |
[Jenkins] install offline (0) | 2022.04.07 |
[Jenkins] 빌드 툴(Maven, Ant, Gradle) 등록 후 Pipeline에서 이용 (0) | 2021.11.12 |