外部デプロイツールのデプロイの追跡

GitLab 12.5で導入されました

GitLabはビルトインのデプロイソリューションを提供していますが、HerokuやArgoCDのような外部のデプロイツールを使いたい場合もあるでしょう。GitLabはこれらの外部ツールからのデプロイイベントを受け取ることができ、GitLab内でデプロイを追跡することができます。例えば、トラッキングを設定することで以下のような機能が利用できます:

note
保護環境デプロイ承認者デプロイの安全性環境のロールバックなど、GitLabがそれらの外部デプロイを承認し、活用することができないため、いくつかの機能は利用できません。

デプロイ追跡の設定方法

外部のデプロイツールは通常、デプロイの状態が変更されたときに追加のAPIリクエストを実行するWebhookを提供します。GitLabデプロイ API にリクエストを行うようにツールを設定することができます。以下はイベントと API リクエストの流れの概要です:

note
GitLab API 認証用のプロジェクトアクセストークンを作成できます。

例ArgoCD のデプロイを追跡します。

ArgoCD Webhook を使って GitLab Deployment API にデプロイイベントを送ることができます。以下は、ArgoCD が新しいリビジョンのデプロイに成功したときに GitLab にsuccess デプロイ記録を作成する設定例です:

  1. 新しい 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
    
  2. アプリケーションに新しいサブスクリプションを作成します:

    kubectl patch app <your-app-name> -n argocd -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-deployed.gitlab":""}}}' --type merge
    
note
デプロイが期待通りに作成されなかった場合、argocd-notifications ツールを使ってトラブルシュートすることができます。例えば、argocd-notifications template notify gitlab-deployment-status <your-app-name> --recipient gitlab:argocd-notifications は API リクエストを即座にトリガーし、もしあれば GitLab API サーバーからのエラーメッセージを表示します。