GitLab ChatOps

GitLab ChatOpsは、Slackのようなチャットサービスを通じてCI/CDジョブをやり取りする方法を提供します。 多くの組織では、ディスカッション、コラボレーション、トラブルシューティングがチャットサービスで行われています。 CI/CDジョブを実行し、出力をチャンネルに投稿する方法を持つことで、チームのワークフローを大幅に強化することができます。

GitLab ChatOpsの仕組み

GitLab ChatOpsはGitLab CI/CDとSlack Slash Commandsをベースに構築されています。ChatOpsは以下の引数を持つスラッシュコマンドに対してrun アクションを提供します:

  • <job name>
  • <job arguments>

ChatOpsは以下のCI/CD変数をジョブに渡します:

  • CHAT_INPUT には追加の引数が含まれます。
  • CHAT_CHANNEL には、アクションがトリガーされたチャネルの名前が設定されます。

実行されると、ChatOpsは指定されたジョブ名を検索し、.gitlab-ci.ymlで対応するジョブとのマッチングを試みます。masterでマッチするジョブが見つかった場合、そのジョブのみを含むパイプラインがスケジュールされます。 ジョブが完了した後:

  • ジョブが30分以内に完了した場合、ChatOpsはジョブの出力をSlackに送信します。
  • ジョブが30分以上で完了する場合、ジョブはチャンネルにデータを送信するためにSlack APIを使用する必要があります。

run コマンドを使用するには、開発者アクセス以上である必要があります。 ジョブがチャットからトリガーされるべきではない場合、ジョブをexcept: [chat]に設定することができます。

ChatOps CIジョブのベストプラクティス

ChatOpsはGitLab CI/CDをベースに構築されているため、ジョブはすべて同じ機能と特徴を持っています。 ChatOpsジョブを作成する際には、以下のベストプラクティスを考慮してください:

  • GitLabはジョブが標準的なCIパイプラインの一部として実行されないように、only: [chat] を設定することを強く推奨します。
  • ジョブがwhen: manualに設定されている場合、ChatOpsはパイプラインを作成しますが、ジョブは開始されるのを待ちます。
  • ChatOpsはアクセスコントロールのための限定的なサポートを提供します。 スラッシュコマンドをトリガーするユーザがプロジェクト内で開発者以上のアクセス権を持っている場合、ジョブは実行されます。 ジョブ自体は、GITLAB_USER_ID のような既存のCI/CD変数を使用して追加の権限検証を実行できますが、これらの変数はオーバーライドすることができます。

ChatOpsリプライのコントロール

単一のコマンドを持つジョブの出力はリプライとしてチャネルに送られます。 例えば、以下のジョブのチャットのリプライはHello World チャンネルに送られます:

hello-world:
  stage: chatops
  only: [chat]
  script:
    - echo "Hello World"

複数のコマンド (またはbefore_script) を含むジョブは、チャットの返信に追加の内容を返します。 これらの場合、コマンドとその出力の両方が含まれ、コマンドはANSIカラーコードでラップされます。

あるコマンドの出力を選択的に返信するためには、その出力はchat_reply セクションによって制限されなければなりません。 例えば、以下のジョブはカレントディレクトリのファイルをリストアップします:

ls:
  stage: chatops
  only: [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"

GitLab ChatOpsの例

GitLab.com チームは、GitLab の Production インスタンスとやりとりするために使っている一般的な ChatOps スクリプトのリポジトリを作成しました。 他の GitLab インスタンスの管理者は、これらのリポジトリが役に立つかもしれません。 自分のアプリケーションとやりとりするために書く ChatOps スクリプトのヒントになるでしょう。

GitLab ChatOpsアイコン

公式GitLab ChatOpsアイコンをダウンロードできます。 公式GitLab ChatOpsアイコンはこちらから検索・ダウンロードできます。

GitLab ChatOps bot icon