외부 배포 도구의 배포 추적
Tier: Free, Premium, Ultimate
Offering: GitLab.com, Self-Managed, GitLab Dedicated
GitLab은 내장 배포 솔루션을 제공하지만 Heroku나 ArgoCD와 같은 외부 배포 도구를 사용하는 것을 선호할 수 있습니다. GitLab은 이러한 외부 도구에서의 배포 이벤트를 수신하고 GitLab 내에서 해당 배포를 추적할 수 있도록 합니다. 예를 들어 추적을 설정하여 다음과 같은 기능을 사용할 수 있습니다:
- Merge Request이 배포되었는지 및 어떤 환경으로 배포되었는지 확인.
- 환경 또는 배포 날짜별로 Merge Request 필터링](../../user/project/merge_requests/index.md#by-environment-or-deployment-date).
- DevOps 연구 및 평가(DORA) 지표.
- 환경 및 배포 보기.
- 배포별로 새롭게 포함된 Merge Request 추적.
배포 추적 설정 방법
외부 배포 도구는 일반적으로 배포 상태가 변경될 때 추가 API 요청을 실행하기 위한 웹훅을 제공합니다. 도구를 구성하여 GitLab 배포 API에 요청을 보낼 수 있습니다. 이벤트 및 API 요청 흐름은 다음과 같습니다:
- 배포가 시작되면
running
상태의 배포 생성. - 배포가 성공하면 배포 상태를
success
로 업데이트. - 배포에 실패하면 배포 상태를
failed
로 업데이트.
GitLab API 인증을 위해 프로젝트 액세스 토큰을 만들 수 있습니다.
예시: ArgoCD의 배포 추적
ArgoCD 웹훅을 사용하여 배포 이벤트를 GitLab 배포 API에 보낼 수 있습니다.
다음은 ArgoCD가 새로운 리비전을 성공적으로 배포할 때 GitLab에 success
배포 레코드를 생성하는 예시 설정입니다:
- 새 웹훅을 생성합니다. 아래 매니페스트 파일을 저장하고
kubectl apply -n argocd -f <매니페스트-파일-경로>
를 사용하여 적용할 수 있습니다: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: argocd-notifications-cm data: trigger.on-deployed: |- 설명: 응용 프로그램이 동기화되어 건강할 때 실행됩니다. 커밋 당 한 번 트리거됩니다.
oncePer: app.status.sync.revision
send:
- gitlab-deployment-status
when: app.status.operationState.phase in [‘Succeeded’] and app.status.health.status == ‘Healthy’
template.gitlab-deployment-status: |
webhook:
gitlab:
method: POST
path: /projects/
/deployments body: | { "status": "success", "environment": "production", "sha": "{{.app.status.operationState.operation.sync.revision}}", "ref": "main", "tag": "false" } service.webhook.gitlab: | url: https://gitlab.com/api/v4 headers:
- gitlab-deployment-status
when: app.status.operationState.phase in [‘Succeeded’] and app.status.health.status == ‘Healthy’
template.gitlab-deployment-status: |
webhook:
gitlab:
method: POST
path: /projects/
- name: PRIVATE-TOKEN
value:
- name: Content-type value: application/json ```
- 설명: 응용 프로그램이 동기화되어 건강할 때 실행됩니다. 커밋 당 한 번 트리거됩니다.
oncePer: app.status.sync.revision
send:
- 응용 프로그램에 새 구독을 생성합니다:
shell kubectl patch app <your-app-name> -n argocd -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-deployed.gitlab":""}}}' --type merge
배포가 예상대로 생성되지 않은 경우
argocd-notifications
도구를 사용하여 문제를 해결할 수 있습니다.
예를 들어, argocd-notifications template notify gitlab-deployment-status <your-app-name> --recipient gitlab:argocd-notifications
를 실행하면 GitLab API 서버로부터 즉시 API 요청을 트리거하고 오류 메시지를 렌더링합니다.