外部デプロイツールのデプロイの追跡
GitLab 12.5で導入されました。
GitLabはビルトインのデプロイソリューションを提供していますが、HerokuやArgoCDのような外部のデプロイツールを使いたい場合もあるでしょう。GitLabはこれらの外部ツールからのデプロイイベントを受け取ることができ、GitLab内でデプロイを追跡することができます。例えば、トラッキングを設定することで以下のような機能が利用できます:
- マージリクエストがいつ、どの環境にデプロイされたかを確認できます。
- 環境またはデプロイ日でマージリクエストをフィルターします。
- DevOps Research and Assessment(DORA) メトリクス。
- 環境とデプロイを表示します。
- デプロイごとに新しく含まれるマージリクエストを追跡します。
デプロイ追跡の設定方法
外部のデプロイツールは通常、デプロイの状態が変更されたときに追加のAPIリクエストを実行するWebhookを提供します。GitLabデプロイ API にリクエストを行うようにツールを設定することができます。以下はイベントと API リクエストの流れの概要です:
- デプロイの実行が開始されると、
running
ステータスのデプロイが作成されます。 - デプロイが成功すると、デプロイ ステータスを
success
に更新します。 - デプロイに失敗した場合、デプロイ ステータスを
failed
に更新します。
例ArgoCD のデプロイを追跡します。
ArgoCD Webhook を使って GitLab Deployment API にデプロイイベントを送ることができます。以下は、ArgoCD が新しいリビジョンのデプロイに成功したときに GitLab にsuccess
デプロイ記録を作成する設定例です:
-
新しい Webhook を作成します。以下のマニフェストファイルを保存し、
kubectl apply -n argocd -f <manifiest-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
-
アプリケーションに新しいサブスクリプションを作成します:
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 サーバーからのエラーメッセージを表示します。