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
 

[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

 

복사했습니다!