이 슬랙 봇은 개발 팀의 워크 플로를 향상시킵니다. 특히 통합이 상자 밖으로 작동하기 때문에 Jenkins, Github, Gitlab 및 Jira에 중점을 둡니다. 그러나 사용자 정의 명령, 매크로, 크론 및 기타 프로젝트 별 명령은 간단하고 유연한 방식으로 구현 될 수 있습니다.
_metadata :
major_version : 1
minor_version : 1
display_information :
name : slack_bot
background_color : " #382e38 "
features :
app_home :
messages_tab_enabled : true
messages_tab_read_only_enabled : false
bot_user :
display_name : bot
always_online : true
oauth_config :
scopes :
bot :
- app_mentions:read
- channels:read
- channels:history
- groups:history
- chat:write
- im:history
- im:write
- mpim:history
- reactions:read
- reactions:write
- users:read
- files:read
- pins:write
settings :
event_subscriptions :
bot_events :
- app_mention
- message.im
interactivity :
is_enabled : true
org_deploy_enabled : false
socket_mode_enabled : true
token_rotation_enabled : false 먼저 config.yaml 준비하고 config-example.yaml을 살펴보십시오.
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go 또는 실행하기 위해 make run . Slack 사용자는 실행할 명령이 포함 된 봇 사용자/앱에 개인 메시지를 보내야합니다. 또한 모든 채널에 봇을 추가하고 @bot_name, eg @slack-bot start job DailyDeployment 로 명령을 접두사로 봇 명령을 실행할 수 있습니다.
참고 : 봇을 채널에 초대하여 명령을 처리 할 수 있어야합니다.
help 명령은이 봇의 사용 가능한 모든 명령 목록을 인쇄합니다. help *command* 사용하면 단일 명령에 대한 간단한 설명과 몇 가지 예제가 표시됩니다.

봇은 간단하지만 강력한 방식으로 Jenkins 작업을 시작하고 모니터링 할 수 있습니다.
기본적으로 "jenkins.host"가 구성 파일에 정의 될 때까지 명령을 사용할 수 없으며 "도움말"에 표시되지 않습니다.
start job 명령은 Jenkins 작업을 시작하고 현재 진행 상황을 보여줍니다. 주의 : 구성에서 화이트리스트 작업 만 시작할 수 있습니다!
또한 각 작업에는 구성 가능한 trigger 있어 작업을 시작하기 위해 사용자 정의 명령을 만들 수 있습니다. (매개 변수 이름을 고려하는 regexp입니다). 예를 들어 "매일 시작하는 시작"은 Jenkins 직무의 트리거가 될 수 있습니다. 이 텍스트를 봇에 보내면 작업이 시작됩니다.
작업을 시작한 후 봇은 예상 빌드 시간과 일부 액션 버튼을 표시합니다. 로그를 열거나 빌드를 직접 중단 할 수 있습니다.
봇은 또한 퍼지 브랜치 검색을 사용하여 매개 변수를 구문 분석하고 브랜치 이름을 조회 할 수 있습니다.
예 :
trigger job DeployBetastart job BackendTests TEST-123 (Test-123을 포함하는 전체 지점 이름 검색. 

봇은 또한 Jenkins 빌드에 대한 한 번의 알림을 만들 수 있습니다. 이것은 개발자가 결과를 기다리는 장기 작업에 유용 할 수 있습니다.
예:
inform me about build NightlyTests (가장 최근의 달리기 빌드 시계)inform me about build MyJobName #423 (빌드 번호 지정)inform job MyJobName주어진 작업에 대한 모든 프로세스 빌드에 대한 슬랙 메시지를받습니다.
예:
JenkinsSelfCheck 의 구축에 대해 통지하는 것을 watch JenkinsSelfCheckunwatch JenkinsSelfCheckJenkins 측에서 작업 실행을 비활성화/활성화하기위한 작은 명령.
예:
disable job NightlyTests (Jenkins에서 작업 비활성화)enable job NightlyTests빌드가 실패하면 빌드를 다시 시도 할 수 있습니다.
예:
retry build NightlyTests (작업의 마지막 빌드를 다시 시작)retry build NightlyTests #100 (빌드가 주어진 재림) jenkins nodes 사용 가능한 모든 Jenkins 노드가 나열됩니다. 온라인/오프라인 상태 및 집행자 수가 보입니다. 
github/gitlab/bitbucket/stash pull 요청에 링크를 붙여 넣으면 봇이 티켓의 상태를 추적합니다!
또한 사용자 정의 "승인 된"반응을 설정할 수 있습니다. 예 : 누가 또는 어느 구성 요소/부서가 풀 요청을 승인했는지 직접 확인하려면 반응 이름 또는 유니 코드 문자 디렉토리를 사용할 수 있습니다.
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
추가 기능 : Bitbucket의 경우 BOT는 현재 빌드 상태 (예 : Jenkins/Bamboo 등)를 추출 할 수 있으며 반응으로 실패 및 달리기 빌드 (화재 반응)를 표시 할 수 있습니다 (Circle Arrow Reaction). 빌드가 안정되면 빌드 반응이 사라집니다. 
현재 실행중인 명령이 완료 될 때까지 queue 명령 then 별명과 함께)은 주어진 명령을 대기열 할 수 있습니다.
다음 시나리오 예 : 빌드 작업 (몇 분이 걸릴 수 있음)과 빌드 아티팩트에 의존하는 배포 작업이 있습니다. 이제 할 수 있습니다 :
trigger job Build feature1234queue trigger job DeployBranch feature1234queue reply Deployment is done!기타 예 :
delay 1hthen send message #backend coffee time?Jenkins Jobs 또는 PR Watcher와 같은 모든 실행중인 배경 명령을 보려면이 명령을 사용하십시오.
list queue봇은 단일 티켓 또는 전체 티켓 목록에서 Jira의 정보를 쿼리 할 수 있습니다.
기본적으로 "jira.host"가 구성 파일에 정의 될 때까지 "도움말"에 명령을 사용할 수없고 표시되지 않습니다.
예
jira TEST-1234jira 1242 (구성된 기본 JIRA 프로젝트를 사용하여 티켓을 엽니 다)jql type=bug and status=open (기본적으로 기본 프로젝트 사용)jira "Second city" (기본 프로젝트에서 티켓 검색) 

특정 JIRA 티켓에 상태 변경이있을 때 알림을받을 수도 있습니다.
예
watch ticket PROJ-12234버튼을 누를 때 봇 작업을 수행하는 버튼을 만들 수 있습니다. 느슨한 상호 작용

예 :
add button "Start Deployment" "trigger job LiveDeployment"메모
봇 동작을 사용자 정의하기 위해 사용자 별 변수를 구성하십시오. 예를 들어 각 개발자는 자신의 서버 환경을 가지고 있습니다.
예 : 이 글로벌 구성 :
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} 다음과 같은이 명령이 다음과 같은 경우 각 개발자가 호출 할 수 있습니다. set variable defaultSerer foobarX.local Custom "defaultserver"를 등록하려면.
이제 deploy mater 호출 할 때 master 브랜치를 foobarX.local Server에 배포합니다.
여기서 또 다른 예는 GO 템플릿을 사용하는 고급 버전입니다. 결국, 명령은 다음과 같은 하나의 하위 명령을 생성합니다. reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> 는 슬랙 채널에 링크를 게시합니다.
- name : demo
trigger : " demo (?P<ticketId> \ w+- \ d+) "
commands :
- |
{{ $ticket := jiraTicket .ticketId }}
{{ if $ticket }}
reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
{{ else }}
reply Ticket {{ .ticketId }} not found :white_frowning_face:
{{ end }}
description : Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
examples :
- demo XYZ-1232 사용자는 set variable serverEnvironment aws-02 사용하여 기본 환경을 한 번 정의 할 수 있습니다.
그런 다음 deploy feature-123 정의 된 aws-02 환경에 분기를 배포합니다. 각 사용자는 자신의 변수를 정의 할 수 있습니다.
공식 OpenAi 통합 (GPT3.5)과 대화와 같은 chatgpt를 가질 수도 있습니다!

질문에 "OpenAi"또는 "ChatGpt"를 입력하여 잘 알려진 chatGpt 페이지와 같이 작동하는 새 스레드를 만듭니다. 마지막 10 개의 메시지의 내용은 컨텍스트로 사용됩니다. 작동하려면 구성에 유효한 "Openai.api_key"가 제공되어야합니다.
확장 구성 :
openai :
api_key : " sk-123....789 "
initial_system_message : " You are a Slack bot for Project XYZ, please answer shortly. "
update_interval : ' 3s ' # fewer Slack messages update during generation
model : gpt-3.5-turbo
temperature : 0.8
log_texts : true # opt in: log all input/output text to the log기존 스레드 내에서 "OpenAi XXX"명령을 사용하는 경우 이전 메시지는 추가 호출의 컨텍스트로 사용됩니다.
또한 템플릿 (사용자 정의 명령 또는 크론)에서 함수를 사용할 수도 있습니다.
{{ openai "Say some short welcome words to @Jon_Doe"}} Hello Jon, welcome! How can I assist you today?
봇은 Dall-E의 도움으로 이미지를 생성 할 수 있습니다. "Dalle"으로 프롬프트를 표시하면 봇이 텍스트를 기반으로 이미지를 생성합니다.

작은 휴식이 필요하고 작은 퀴즈 게임을하고 싶다면이 명령을 호출하여 그렇게 할 수 있습니다. 50 개 이상의 질문이 허용되지 않습니다. 질문은 다른 범주와 어려운 수준에서 왔으며 객관식 또는 진실/거짓 질문입니다.
명령
quiz 10 10 질문으로 퀴즈를 시작합니다answer 1 첫 번째 답변으로 질문에 답하십시오. 
위치의 현재 날씨에 대한 정보를 얻기 위해 OpenWeatherMap을 설정할 수 있습니다.

예제 구성 :
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " 모든 사용자는 자체 명령 별칭을 정의 할 수 있습니다. 이것은 매일 같은 명령을 입력하지 않는 편리한 기능입니다.
예제 사용
list commandsadd command 'myCommand' 'trigger job RestoreWorld 7 > 나중에 myCommand 에 전화하십시오.add command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand 실행 하여이 Jenkins 작업을 트리거 할 수 있습니다. 
정의 된 "명령"(이전 "매크로")은 매우 마법이며 Yaml 구성 파일에서 정의 될 수 있습니다.
그들은 트리거 (정규 표현)를 가지고 있으며 실행될 하위 명령 목록이 있습니다. 그들은 REGEXP의 매개 변수 그룹을 고려하여 매우 유연 할 수 있습니다!
주어진 지점 이름으로 동시에 두 개의 Jenkins 작업을 시작하는 간단한 예 :
commands :
- name : build clients
trigger : " build clients (?P<branch>.*) "
commands :
- " reply I'll build {{ .branch }} for you "
- " trigger job BuildFrontendClient {{ .branch }} "
- " trigger job BuildMobileClient {{ .branch }} "
- " then reply done! :checkmark: " 
참고 : 명령에서 GO-> 루프/조건의 전체 템플릿 기능 세트를 사용할 수 있습니다!
Go의 일반적인 템플릿 기능 외에도 템플릿 범위에서 많은 봇 특정 명령을 사용할 수 있습니다.
list template functions 명령을 사용하여 사용 가능한 모든 함수 (인수 및 반환 유형) 목록을 생성 할 수 있습니다. 
참고 : 이 템플릿 기능은 다른 명령/기능에서 사용할 수 있습니다.
retry 또는 repeat 마지막으로 실행 된 명령은 다시 실행됩니다. -> 실패한 Jenkins 작업이 수정되었을 때 유용합니다.
command 명령과 함께 유용하거나 Jenkins 작업의 후크로 유용 할 수있는 작은 명령.
예제 명령 : delay 10m trigger job DeployWorldwide
답장으로 대기열 작업을 중지하라는 명령을 얻을 수 있습니다 ( stop timer 123456 ). 모든 사람이 명령을 보낼 수 있으므로 명령을 사용하여 배포를 발표 할 수 있으며 의심의 여지없이 모든 사람이 실행을 중단 할 수 있습니다.
reply 및 send message 또한 command 또는 Jenkins 후크와 함께 유용한 작은 명령입니다.
예 :
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...다른 옵션을 결정할 수없는 경우 간단한 명령
예
random Pizza Pasta -> "피자"또는 "파스타"를 생산합니다.random Peter Paul Tom Jan > 누가 오늘 음식을 조직해야합니까?config.yaml 이라는 config 파일 작성 ( config.example.yaml 을 살펴볼 수 있음) 이 명령은 config.yaml 파일을 기본적으로 사용하여 봇을 시작합니다. -config 인수를 사용하여 다른 위치에서 구성 파일을 사용하십시오.
go run cmd/bot/main.go
주의 : config.yaml 파일을 먼저 만듭니다
docker-compose up
구성은 외부 서비스 및 사용자 정의 명령 등의 자격 증명을 저장하는 간단한 .yaml 파일을 통해 관리됩니다.
가장 쉬운 방법은 필요한 모든 옵션이 포함 된 하나의 config.yaml 파일 만 있으면 config.yaml 이 기본적으로로드됩니다. 구성을 여러 파일로 분할 할 수도 있습니다.
여러 구성 파일의 예제 구조 :
secret.yaml 외부 서비스 (Slack, Jenkins)에 대한 자격 증명을 포함하는 -Puppet/Ansible 등으로 관리 할 수 있습니다.jenkins.yaml Jenkins 작업 및 그 매개 변수 등의 구성project-X.yaml 사용자 정의 명령project-Y.yaml 다중 구성 파일을로드하려면 모든 구성을 병합 한 go run cmd/bot/main.go -config /path/to/config/*.yaml 사용하십시오.
이 봇을 실행하려면 슬랙 애플리케이션을 위해 "봇 토큰"이 필요합니다. 필요한 토큰으로 적절한 앱을 만드는 방법에 대한 설치 섹션을 참조하십시오.
Jenkins 작업을 시작하거나 모니터링하려면 먼저 호스트와 자격 증명을 설정해야합니다. 사용자는 작업에 대한 액세스 권한과 화이트리스트 작업에 대한 작업을 트리거 할 권리가 필요합니다.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secret작업을 시작하려면 작업 및 매개 변수를 구성에 정의해야합니다.
매개 변수가없는 작업은 매우 간단 해 보입니다.
jenkins :
jobs :
CleanupJob : 그런 다음 trigger job CleanupJob 또는 start job CleanupJob 작업을 시작할 수 있습니다. 또한 작업이 성공하거나 실패했을 때 (오류 로그 포함)도 알려줍니다.
다음으로 두 개의 매개 변수가있는 작업 :
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : all이 작업은 두 가지 매개 변수를 처리 할 수 있습니다.
구성에서 VSC를 설정하면 전체 지점 이름을 전달할 필요가 없지만 퍼지 검색을 사용할 수 있습니다.
예:
start job RunTests 마스터 브랜치에서 "모든"그룹이 시작됩니다.start job JIRA-1224 unit 티켓 번호에 대한 매칭 지점을 찾으려고합니다. (고유 한 검색 결과가없는 경우 오류 메시지!)이제 더 많은 마법의 더 복잡한 예 :
jenkins :
jobs :
DeployBranch :
trigger : " deploy (?P<BRANCH>[ \ w \ -_ \ . \ /]*) to (?P<ENVIRONMENT>prod|test|dev) "
parameters :
- name : BRANCH
default : master
type : branch
- name : ENVIRONMENT
onsuccess :
- reply Tadaa : Take a look on http://{{ .ENVIRONMENT }}.example.com 단계별 : trigger 직무를 시작하는 정기적 인 표현식이며, 이는 이름이 지정된 그룹을 포함 할 수 있습니다. REGEXP 그룹은 작업 매개 변수와 자동으로 일치합니다.
그런 다음 deploy bugfix-1234 to test 사용하여 Jenkins 작업을 시작할 수 있습니다.
참고 : start job DeployBranch master 를 통해 항상이 작업을 시작할 수 있습니다. trigger 대안 일뿐입니다.
onsuccess 이 봇을 통해 작업을 시작할 때 실행되는 후크입니다. 또한 onsuccess 및 onerror 도 사용할 수 있습니다 ... 예를 들어 사용자 정의 오류 메시지를 보낼 수 있습니다.
Robfig/Cron 라이브러리를 사용하여 Crons를 통해 정기적 명령을 정의 할 수 있습니다.
예제 구성
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Jenkins Trigger에서 지점 이름을 해결할 수 있으려면 VCS 시스템을 구성 할 수 있습니다 (현재는 Stash/Bitbucket).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_name구성이 제공되지 않으면 자동화 된 브랜치 조회가 없으며 "분기"매개 변수는 Jenkins 작업에 1 : 1 전달됩니다.
환경에서는 일부 기능이 필요하지 않을 수 있습니다. Jira 또는 Bitbucket과 같이 자격 증명이 제공되지 않으면 대부분의 사람들이 활성화되지 않습니다.
다른 것들은 구성을 통해 비활성화 할 수 있습니다.
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ 봇의 코드 클래스가 포함되어 있습니다 : Slack, 사용자 관리, 명령 매칭 ...cmd/bot/ ENTROING POINTS 일명 MAIN.GOcommand/ 실제 명령 "명령"명령으로 구현할 수없는 새 명령이 필요한 경우 GO 코드를 작성해야합니다.
슬랙 애플리케이션을 모방하는 편리한 CLI 애플리케이션이 있습니다. 슬랙 연결없이 로컬 콘솔과 채팅하십시오!
make run-cli
"Air Auto Reload Tool"을 사용하도록 make air .
다음을 통해 실행할 수있는 많은 테스트가 있습니다.
make test
테스트 범위는 빌드/커버리지를 위해 생성됩니다 .html
make test-coverage