외부 배포 도구의 배포 추적하기
외부 배포 도구의 배포 추적하기
GitLab은 자체 내장 배포 솔루션을 제공하지만, 프로젝트에 따라 Heroku나 ArgoCD 같은 외부 배포 도구를 선호할 수도 있어요. GitLab은 이런 외부 도구에서 배포 이벤트를 받아서 직접 추적할 수 있게 해 줍니다. 설정만 해 두면 머지 리퀘스트가 어느 환경에 배포됐는지, DORA 지표 같은 것까지 손쉽게 확인할 수 있죠. 이 글에서 배포 추적 설정 방법을 예제와 함께 보여드릴게요.
출처: 문서
본문
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab은 내장 배포 솔루션을 제공하지만, Heroku나 ArgoCD 같은 외부 배포 도구를 선호할 수도 있어요. GitLab은 이런 외부 도구에서 배포 이벤트를 받아 직접 추적할 수 있게 해 줍니다. 추적을 설정하면 다음과 같은 기능을 사용할 수 있어요.
- 머지 리퀘스트가 언제, 어느 환경에 배포됐는지 확인
- 환경 또는 배포 날짜로 머지 리퀘스트 필터링
- DevOps Research and Assessment (DORA) 지표
- 환경과 배포 보기
- 배포별로 새로 포함된 머지 리퀘스트 추적
GitLab이 해당 외부 배포를 승인하고 활용할 수 없기 때문에 사용할 수 없는 기능도 있어요. 보호된 환경(Protected Environments), 배포 승인(Deployment Approvals), 배포 안전(Deployment safety), 배포 롤백(Deployment rollback)이 그것이죠.
배포 추적 설정 방법
외부 배포 도구는 보통 배포 상태가 변경될 때 추가 API 요청을 실행하는 웹훅을 제공해요. 도구를 구성해서 GitLab Deployment API에 요청을 보내게 하면 됩니다. 이벤트와 API 요청 흐름을 정리하면 다음과 같아요.
- 배포가 실행되기 시작하면 running 상태로 배포를 생성해요.
- 배포가 성공하면 배포 상태를 success로 업데이트해요.
- 배포가 실패하면 배포 상태를 failed로 업데이트해요.
GitLab API 인증에는 프로젝트 액세스 토큰을 만들 수 있어요.
예제: ArgoCD의 배포 추적
ArgoCD 웹훅을 사용해 배포 이벤트를 GitLab Deployment API로 보낼 수 있어요. ArgoCD가 새 revision을 성공적으로 배포하면 GitLab에 success 배포 레코드를 만드는 예제 설정을 보여드릴게요.
새 웹훅을 만드세요. 다음 매니페스트 파일을 저장한 뒤 kubectl apply -n argocd -f <manifest-file-path>로 적용하면 됩니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
trigger.on-deployed: |
- description: Application is synced and healthy. Triggered once per commit.
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/<your-project-id>/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:
- name: PRIVATE-TOKEN
value: <your-access-token>
- name: Content-type
value: application/json
애플리케이션에 새 구독(subscription)을 만드세요.
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 명령은 API 요청을 즉시 발생시키고, GitLab API 서버의 오류 메시지가 있으면 그대로 보여줍니다.
더 알아보기 (Learn more)
GitLab 내장 배포 기능으로 전환하거나 비교해 보고 싶다면 환경과 배포 문서를, 배포 관련 API를 직접 만들고 싶다면 Deployments API 문서를 이어서 확인해 보세요.