Gitlab CI 에서 Merge Request Approve 여부 체크
최근에 Gitlab CI 에 대해서 이것저것 공부를 해보고 있다. CI 자체가 생소한 편이기도 한데.. 작업을 하다보니 Merge Request(MR)에 대해서 Approve 여부를 체크할 수 있는 방법이 있으면 좋겠다 싶어서 api를 이용해 체크하는 스크립트를 작성해 봤다. 프리미엄 버전의 경우 CI_MERGE_REQUEST_APPROVED
변수로 체크를 할 수 있는 듯 하다. 역시 돈이 좋은 듯 하다.
우선 api 사용을 위해서는 ACCESS_TOKEN을 생성해야 한다. 토큰 생성을 아래와 같이 진행하면 된다.
Gitlab CI pipeline 실행을 위해서 아래와 같이 .gitlab-ci.yml
파일을 작성한다.
stages:
- check
check_approval:
stage: check
before_script:
- NUMBER_OF_APPROVERS=$(curl -k "https://${CI_SERVER_HOST}/api/v4/projects/$CI_PROJECT_ID/merge_requests/${CI_MERGE_REQUEST_IID}/approvals?private_token=${GITLAB_CI_ACCESS_TOKEN}" | jq '.approved_by | length')
script:
- |
if [ $NUMBER_OF_APPROVERS -gt 0 ]; then
echo "Approved"
else
echo "Approval required"
fi
only:
- merge_requests
위의 CI 설정은 merge requests 를 생성했을 때와 해당 MR 로 push 이벤트 있을 때 실행된다. ${GITLAB_CI_ACCESS_TOKEN}
는 위에서 생성한 토큰으로 Repo 설정의 CI/CD 변수에 설정해두면 된다.
참고 : https://docs.gitlab.com/ee/ci/variables/predefined_variables.html