2017-11-14 9 views
0

파이썬 요청을 사용하여 GitLab 빌드를 트리거하려고합니다. 일반적으로 curl 명령으로 빌드를 시작할 수 있습니다.트리거 GitLab Python 요청으로 빌드

예 컬 명령 :

curl -X POST \ 
    -F token=TOKEN \ 
    -F ref=master \ 
    -F "variables[UPLOAD_TO_S3]=true" \ 
    https://gitlab.example.com/api/v4/projects/9/trigger/pipeline 

나는 이것을 sh 모듈을 사용하여 작업을 얻을 수 있지만 requests를 사용하여 선호하는 것입니다. 나는 다음과 변화를 시도했다 : 내가 함께하고 headers PARAM없이 시도

data = { 
    'token': token, 
    'ref': master, 
    'variables[UPLOAD_TO_S3]': str(uploadS3), 
} 

headers = {'Content-Type': 'application/json'} 
result = requests.post(_trigger_url, headers=headers, json=data) 

. 나는 또한 params, json, filesdata을 사용하여 data dict을 전달하려고 시도했습니다. 모두 400 또는 404 오류가 계속 발생합니다. 어떤 제안?

답변

1

당신은 당신의 요구의 일환으로 Content-Type: "application/json" 헤더를 보내지해야하며, 만, 그래서 그냥 data 인수로 data DICT을 통과 형태의 인코딩을 필요로한다.

내 Gitlab 인스턴스에 프로젝트의 마스터 브랜치의 빌드를 성공시키고 트리거하는 요청이 있습니다.

In [3]: rsp 
Out[3]: <Response [201]> 

또한 URL 자체에 tokenrefPOST를 보내고 포함하여 파이프 라인을 트리거 할 수 있어야한다 : 내가 ipython '내 rsp 개체를 검사하는 경우 여기

rsp = requests.post('https://gitlab.instance/api/v4/projects/PROJECT_ID/trigger/pipeline', 
      data={'token': '125fdsfdf1ab3631d2423434347643', 'ref': 'master'}) 

출력의 . 나는 Content-Type: "application/json" 헤더를 전달하면

rsp = requests.post('https://gitlab.instance/api/v4/projects/PROJECT_ID/trigger/pipeline?token=TOKEN&ref=master') 

, Gitlab는 HTTP/400 오류로 응답합니다.

+0

그래서 헤더에 무엇을 전달하고 있습니까? 나가 머리말 논쟁을 완전하게 가지고 갈 때 나는 404의 과실을 얻는다. –

+0

@JaySoyer 명시 적으로 헤더를 전달하지 않습니다. 내가 보여준 라인은 빌드를 트리거하기 위해 실행 한 유일한 것입니다 ('가져 오기 요청'외에). 자동 요청 헤더에는'{ 'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', ' 연결 ':'연결 유지 ','Content-Length ':'47 ','Content-Type ':'응용 프로그램/x-www-form-urlencoded '}' – birryree

+0

예제 라인에서 명시 적으로 헤더를 전달하고 있습니다 ... 그래서 내가 물었습니다. 내 자동 헤더는 python-requests 2.18.3을 사용하는 것을 제외하고는 똑같이 보입니다. –