ChatOps
ChatOps
GitLab ChatOps를 쓰면 Slack 같은 채팅 서비스를 통해 CI/CD job과 상호작용할 수 있어요. 팀과 일을 논의하면서 같은 앱 안에서 CI/CD job을 실행하고 출력을 확인할 수 있으니, 협업·트러블슈팅·업무 계획을 한곳에서 처리하기 좋습니다.
출처: 문서
본문
슬래시 명령(/) 통합을 활용하면 ChatOps를 트리거할 수 있어요. 사용 가능한 통합은 이렇게 두 가지입니다.
- GitLab for Slack 앱 (Slack에는 이걸 추천해요)
- Mattermost 슬래시 명령
ChatOps 워크플로우와 CI/CD 구성 (ChatOps workflow and CI/CD configuration)
ChatOps는 프로젝트의 기본 브랜치에 있는 .gitlab-ci.yml에서 지정한 job을 찾아요. job을 찾으면 ChatOps가 그 job만 포함하는 파이프라인을 생성합니다. when: manual로 설정했다면 파이프라인은 만들어지지만 job이 자동으로 시작되지는 않아요.
ChatOps로 실행한 job은 GitLab에서 실행한 job과 기능이 동일해요. job은 GITLAB_USER_ID 같은 기존 CI/CD 변수로 추가 권한 검증을 할 수 있지만, 이 변수들은 덮어쓰기(override)도 가능해요.
job이 표준 CI/CD 파이프라인의 일부로 실행되지 않도록 rules를 설정해 두어야 해요. ChatOps가 job에 전달하는 CI/CD 변수는 이렇습니다.
CHAT_INPUT—run슬래시 명령에 전달된 인자.CHAT_CHANNEL— job이 실행되는 채팅 채널 이름.CHAT_USER_ID— job을 실행하는 사용자의 채팅 서비스 ID.
job 실행 결과는 이렇게 전달돼요.
- job이 30분 안에 완료되면 ChatOps가 job 출력을 채팅 채널로 보냅니다.
- job이 30분을 넘겨 완료되면 Slack API 같은 방법을 써서 채널에 데이터를 보내야 해요.
ChatOps에서 job 제외하기 (Exclude a job from ChatOps)
채팅에서 실행되지 않도록 하려면 .gitlab-ci.yml에서 job을 except: [chat]으로 설정하면 돼요.
ChatOps 응답 커스터마이즈 (Customize the ChatOps reply)
ChatOps는 단일 명령으로 실행된 job의 출력을 채널에 응답으로 보냅니다. 예를 들어 다음 job이 실행되면 채팅 응답은 Hello world가 돼요.
stages:
- chatops
hello-world:
stage: chatops
rules:
- if: $CI_PIPELINE_SOURCE == "chat"
script:
- echo "Hello World"
job에 명령이 여러 개 있거나 before_script가 설정되어 있다면, ChatOps는 명령과 그 출력을 채널로 보내요. 명령은 ANSI 색상 코드로 감싸집니다.
한 명령의 출력만 골라서 응답하고 싶다면 그 출력을 chat_reply 섹션에 넣으면 돼요. 다음 job은 현재 디렉터리의 파일 목록을 보여줍니다.
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 job 실행하기 (Run a CI/CD job using ChatOps)
사전 요구사항은 이렇습니다.
- 프로젝트에 대해 Developer, Maintainer, Owner 역할이 있어야 해요.
- 프로젝트가 슬래시 명령 통합을 사용하도록 설정되어 있어야 해요.
Slack이나 Mattermost에서 기본 브랜치의 CI/CD job을 실행할 수 있습니다. CI/CD job을 실행하는 슬래시 명령은 프로젝트에 설정된 슬래시 명령 통합에 따라 달라져요.
- GitLab for Slack 앱에서는
/gitlab <project-name> run <job name> <arguments>를 사용합니다. - Slack 또는 Mattermost 슬래시 명령에서는
/<trigger-name> run <job name> <arguments>를 사용합니다.
여기서 <job name>은 실행할 CI/CD job 이름, <arguments>는 CI/CD job에 전달할 인자, <trigger-name>은 Slack 또는 Mattermost 통합에 설정된 트리거 이름이에요. ChatOps는 지정한 job만 포함하는 파이프라인을 예약(schedule)합니다.
관련 주제 (Related topics)
더 알아보기
ChatOps는 채팅 화면에서 CI/CD job을 바로 실행해 팀 협업을 이어간다는 점이 핵심이에요. 기본 브랜치의 .gitlab-ci.yml에 job을 정의하고 rules에서 $CI_PIPELINE_SOURCE == "chat"을 잡아주면 표준 파이프라인과 분리할 수 있습니다. 응답을 chat_reply 섹션으로 골라내는 방법을 익혀두면 채팅이 훨씬 깔끔해져요.