GitLab ChatOps

Tier: Free, Premium, Ultimate Offering: GitLab.com, 자체 관리, 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와 같은 추가적인 권한 검증을 수행할 수 있지만, 이러한 변수는 재정의될 수도 있습니다.

rules를 설정하여 작업이 표준 CI/CD 파이프라인의 일부로 실행되지 않도록 해야 합니다.

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 색 코드로 묶입니다.

특정 명령의 출력으로 선택적으로 응답하려면 출력을 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 앱의 경우, /gitlab <프로젝트-이름> run <작업 이름> <인수>를 사용하세요.
  • Slack 또는 Mattermost 슬래시 명령어의 경우, /<트리거-이름> run <작업 이름> <인수>를 사용하세요.

여기서:

  • <작업 이름>은 실행할 CI/CD 작업의 이름입니다.
  • <인수>는 CI/CD 작업에 전달할 인수입니다.
  • <트리거-이름>은 Slack 또는 Mattermost 통합에 구성된 트리거 이름입니다.

ChatOps는 지정된 작업만 포함하는 파이프라인을 예약합니다.

관련 주제