ChatOps
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLab ChatOpsを使用して、Slackなどのチャットサービスを介してCI/CDのジョブを操作します。
多くの組織では、SlackやMattermostを使用して共同作業、トラブルシューティングを行う、作業計画を行っています。ChatOpsを使用すると、チームと作業について話し合い、CI/CDのジョブを実行し、ジョブの出力を表示するすべての操作を同じアプリケーションから行えます。
スラッシュコマンドのインテグレーション
runスラッシュコマンドでChatOpsをトリガーすることができます。
利用可能な次のインテグレーションがあります:
ChatOpsのワークフローとCI/CDの設定
ChatOpsはプロジェクトのデフォルトブランチにある.gitlab-ci.ymlで指定されたジョブを探します。ジョブが見つかった場合、ChatOpsは指定されたジョブのみを含むパイプラインを作成します。when: manualを設定した場合、ChatOpsはパイプラインを作成しますが、ジョブは自動的に開始されません。
ChatOpsで実行されるジョブは、GitLabから実行されるジョブと同じ機能を持っています。ジョブは、既存のCI/CD変数(GITLAB_USER_IDなど)を使用して追加の権限検証を実行できますが、これらの変数はオーバーライドできます。
標準のCI/CDパイプラインの一部としてジョブが実行されないように、rulesを設定する必要があります。
ChatOpsは次のCI/CD変数をジョブに渡します:
CHAT_INPUT-runスラッシュコマンドに渡される引数。CHAT_CHANNEL- ジョブが実行されるチャットチャンネルの名前。CHAT_USER_ID- ジョブを実行するユーザーのチャットサービスID。
ジョブの実行時:
- ジョブが30分未満で完了した場合、ChatOpsはジョブの出力をチャットチャンネルに送信します。
- ジョブが30分を超えて完了した場合、Slack APIのような方法を使用してチャンネルにデータを送信する必要があります。
ChatOpsからジョブを除外する
ジョブがチャットから実行されるのを防ぐには:
.gitlab-ci.ymlで、ジョブをexcept: [chat]に設定します。
ChatOpsの返信をカスタマイズ
ChatOpsは、単一のコマンドを持つジョブの出力を、返信としてチャンネルに送信します。たとえば、次のジョブが実行されると、チャットの返信はHello worldとなります:
stages:
- chatops
hello-world:
stage: chatops
rules:
- if: $CI_PIPELINE_SOURCE == "chat"
script:
- echo "Hello World"ジョブに複数のコマンドが含まれている場合、またはbefore_scriptが設定されている場合、ChatOpsはコマンドとその出力をチャンネルに送信します。コマンドはANSIカラーコードでラップされます。
1つのコマンドの出力で選択的に返信するには、出力をchat_replyセクションに配置します。たとえば、次のジョブは現在のディレクトリのファイルをリスト表示します:
stages:
- chatops
ls:
stage: chatops
rules:
- if: $CI_PIPELINE_SOURCE == "chat"
script:
- echo "This command will not be shown."
- echo -e "section_start:$( date +%s ):chat_reply\r\033[0K\n$( ls -la )\nsection_end:$( date +%s ):chat_reply\r\033[0K"ChatOpsを使用してCI/CDジョブをトリガーする
前提条件:
- プロジェクトのデベロッパー、メンテナー、またはオーナーロールが必要です。
- プロジェクトはスラッシュコマンドのインテグレーションを使用するように設定されています。
SlackまたはMattermostからデフォルトブランチでCI/CDジョブを実行できます。
CI/CDジョブをトリガーするスラッシュコマンドは、プロジェクトにどのスラッシュコマンドインテグレーションが設定されているかによって異なります。
- GitLab for Slack appの場合、
/gitlab <project-name> run <job name> <arguments>を使用します。 - SlackまたはMattermostスラッシュコマンドの場合、
/<trigger-name> run <job name> <arguments>を使用します。
各項目の説明は以下のとおりです:
<job name>は実行するCI/CDジョブの名前です。<arguments>はCI/CDジョブに渡す引数です。<trigger-name>はSlackまたはMattermostインテグレーション用に設定されたトリガー名です。
ChatOpsは、指定されたジョブのみを含むパイプラインをスケジュールします。
関連トピック
- GitLabがGitLab.comとやり取りするために使用する共通のChatOpsスクリプトのリポジトリ
- GitLab for Slackアプリ
- Slackのスラッシュコマンド
- Mattermostのスラッシュコマンド