개요
2024.01.05-[GitLab] git cli로 Merge Request 생성에서 Git Push와 함께 MR 생성을 자동화할 수 있도록 CLI로 작업을 해봤는데, 이후 동작에서 이미 생성되어 있는 MR 정보를 갱신해야 할 필요가 생겼다.
GitLab API를 이용해 특정 프로젝트의 MR을 찾아 업데이트하는 방법을 정리한다.
예시로 파이썬으로 구현해둔다.
MR 업데이트
공식 문서에 의하면 MR을 업데이트할 때는 아래와 같은 URL에 Put 요청을 하면 된다. project의 id와 mr의 id는 필수값이고, 업데이트할 값에 해당하는 labels, assignee_id, title, description 등등의 여러 값은 필요에 맞게 전달하면 된다.
PUT /projects/:id/merge_requests/:merge_request_iid
전달할 수 있는 정보는 공식 문서(https://docs.gitlab.com/ee/api/merge_requests.html#update-mr)를 참조하는 것을 권한다.
예시 )
아래 예시는 특정 MR의 제목과, 내용을 변경하는 요청이다.
project_id = <프로젝트 아이디>
mr_iid = <MR_ID>
title = '<MR 제목>'
description = '<MR 내용>'
token = 'API 토큰'
api_url = f'https://gitlab.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}/'
data = {
"title": title,
"description": description
}
headers = {"PRIVATE-TOKEN": token}
requests.put(api_url, data=data, headers=headers)
테스트
예시로 다음과 같은 GitLab 원격 저장소가 있다고 하자.
그리고 해당 저장소에 생성되어 있는 다음의 MR의 제목과 내용을 갱신해 본다.
웹에서 project_id와 MR id를 확인하여 지정하고, 업데이트할 값을 적당히 정해 실행했다.
token = 'API 토큰'
project_id = 26909238
mr_iid = 1
title = 'test_mr'
description = 'UPDATE MR using API'
api_url = f'https://gitlab.com/api/v4/projects/{project_id}/merge_requests/{mr_iid}/'
data = {
"title": title,
"description": description
}
headers = {"PRIVATE-TOKEN": token}
response = requests.put(api_url, data=data, headers=headers)
print(response.json())
요청 응답 )
이상이 없으면 다음과 같이 응답이 출력되고,
{
'id': 273511826,
'iid': 1,
'project_id': 26909238,
'title': 'test_mr',
'description': 'UPDATE MR using API',
'state': 'opened',
'created_at': '2024-01-05T05:43:12.374Z',
'updated_at': '2024-04-11T08:56:03.561Z',
... 생략 ...
}
웹에서도 갱신된 값을 확인할 수 있다.
🤔 이왕 자동화를 한다면 gitlab 원격 저장소 정보 찾기, 원격 저장소의 mr 목록 중 업데이트할 mr 찾기 등의 기능도 구현하는 것이 좋겠다.
참고 문서
https://docs.gitlab.com/ee/api/merge_requests.html#update-mr