Este bot frouxa melhora o fluxo de trabalho das equipes de desenvolvimento. Especialmente com foco em Jenkins, Github, Gitlab e Jira, enquanto a integração está funcionando fora da caixa. Mas também comandos personalizados, macros, crons e outros comandos específicos do projeto podem ser implementados de maneira simples e flexível.
_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 Primeiro prepare o config.yaml , basta dar uma olhada no config-explet.yaml
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go OU make run PARA RUNHA O APLICATIVO GO Como usuário do Slack, basta enviar uma mensagem privada para o usuário/aplicativo bot que contém o comando para executar. Além disso, você pode adicionar o bot a qualquer canal e executar comandos de bot nele prefixando seu comando com @slack-bot start job DailyDeployment , por exemplo
Nota: você deve convidar o bot para o canal para poder lidar com os comandos.
O comando help apenas imprime uma lista de todos os comandos disponíveis deste bot. Com help *command* você receberá uma descrição curta e alguns exemplos para um único comando.

O bot é capaz de iniciar e monitorar o trabalho de Jenkins de uma maneira simples, mas poderosa.
Por padrão, os comandos não estão disponíveis e não são visíveis na "ajuda", até que o "jenkins.host" seja definido no arquivo de configuração.
O comando start job inicia um trabalho de Jenkins e mostra o progresso atual. ATENÇÃO: Apenas trabalhos em permissões na configuração são iniciáveis!
Além disso, cada trabalho pode ter um trigger configurável que possibilite a criação de comandos personalizados para iniciar trabalhos. (É um regexp que leva em consideração os nomes dos parâmetros). Por exemplo, "Iniciar a implantação diária" pode ser o gatilho para um trabalho de Jenkins. Enviar este texto para o bot iniciaria o trabalho.
Depois de iniciar um emprego, o bot mostrará o tempo de construção estimado e alguns botões de ação. Lá você pode abrir os logs ou abortar a construção diretamente.
O bot também é capaz de analisar parâmetros e nomes de ramificação de pesquisa usando uma pesquisa de ramificação difusa.
Exemplos:
trigger job DeployBetastart job BackendTests TEST-123 (procure um nome completo de ramificação, contendo teste-123. Por exemplo, recurso/test-123-add-add-feature-456) 

O bot também tem a possibilidade de criar notificações únicas para as construções de Jenkins. Isso pode ser útil para trabalhos de longa duração, onde os desenvolvedores estão aguardando o resultado.
Exemplo:
inform me about build NightlyTests (observa a construção mais recente)inform me about build MyJobName #423 (especifique um número de compilação)inform job MyJobName (sintaxe alternativa)Receba mensagens folgadas para todas as compilações de processo para o trabalho especificado:
Exemplo:
watch JenkinsSelfCheck notifica sobre qualquer construção de Job JenkinsSelfCheckunwatch JenkinsSelfCheckPequeno comando para desativar/ativar a execução do trabalho no lado de Jenkins.
Exemplo:
disable job NightlyTests (desative o trabalho em Jenkins)enable job NightlyTestsQuando uma construção falhou, você pode tentar tentar qualquer compilação por:
Exemplo:
retry build NightlyTests (experimenta a última construção de um emprego)retry build NightlyTests #100 (PROBLEMAS DE BUIRAÇÃO) jenkins nodes lista todos os nós Jenkins disponíveis. O status online/offline e o número de executores são visíveis.
Se você apenas colar um link para uma solicitação Github/Gitlab/Bitbucket/Stash, o bot rastreará o estado do ticket!
Você também pode definir reações "aprovadas" personalizadas. Por exemplo, para ver diretamente quem ou qual componente/departamento aprovou uma solicitação de tração, você pode usar o nome da reação ou o diretório de caracteres unicode
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
Recursos extras: para o Bitbucket, o bot é capaz de extrair o status de construção atual (por exemplo, de Jenkins/Bamboo etc) e mostrar falhas e construções de corrida (reação de incêndio) como reação (reação de seta do círculo). Quando a construção é estável, as reações de construção desaparecem.
O comando queue (com o alias then ) é capaz de fazer fila o comando fornecido, até que o comando atualmente em execução seja concluído.
Exemplo de cenário a seguir: Você tem um trabalho de construção (que pode levar alguns minutos) e um trabalho de implantação que se baseia nos artefatos de construção. Agora você pode fazer:
trigger job Build feature1234 para iniciar o trabalho de construção com uma dada filialqueue trigger job DeployBranch feature1234queue reply Deployment is done!Outro exemplo:
delay 1hthen send message #backend coffee time?Para ver todos os comandos em segundo plano (como Jenkins Jobs ou PR Watcher), use este comando:
list queueO bot é capaz de consultar informações da JIRA, de um único bilhete ou de uma lista inteira de ingressos.
Por padrão, os comandos não estão disponíveis e não são visíveis na "ajuda", até que o "jira.host" seja definido no arquivo de configuração.
Exemplos
jira TEST-1234jira 1242 (abre o bilhete, usando o projeto JIRA padrão configurado)jql type=bug and status=open (Use Projeto Padrão por Padrão)jira "Second city" (pesquisa de texto de ingressos no projeto padrão) 

Também é possível obter uma notificação quando há uma mudança de estado em um certo ingresso da JIRA.
Exemplo
watch ticket PROJ-12234É possível criar botões que executem qualquer ação de bot ao pressionar o botão. Interações frouxas

Exemplos:
add button "Start Deployment" "trigger job LiveDeployment"Observação
Configure variáveis específicas do usuário para personalizar o comportamento do bot. Por exemplo, cada desenvolvedor tem seu próprio ambiente de servidor.
Exemplo: ter esta configuração global:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} Cada desenvolvedor agora pode ligar assim que isso comandos como: set variable defaultSerer foobarX.local para registrar o "padrão padrão" personalizado.
Quando agora chama deploy mater , ele implantará a filial master no servidor foobarX.local .
Outro exemplo aqui uma versão avançada que usa os modelos Go. No final, o comando gerará um subcomando, como: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> que publicará o link para o canal Slack.
- 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 O usuário pode definir seu ambiente padrão uma vez usando set variable serverEnvironment aws-02 .
Em seguida, o deploy feature-123 implantará a ramificação no ambiente aws-02 definido. Cada usuário pode definir suas próprias variáveis.
Também é possível ter um chatgpt como uma conversa com a integração oficial do Openai (GPT3.5)!

Basta digitar "Openai" ou "ChatGPT" antes da sua pergunta para criar um novo thread que se comporte como a conhecida página ChatGPT. O conteúdo das últimas 10 mensagens é usado como contexto. Para fazê -lo funcionar, um "OpenAI.API_KEY" válido deve ser fornecido na configuração.
Config estendido:
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 logAo usar o comando "Openai xxx" em um thread existente, as mensagens anteriores são usadas como contexto para mais chamadas.
Também é possível usar a função nos modelos (como em comandos personalizados ou Crons).
{{ openai "Say some short welcome words to @Jon_Doe"}} imprimiriam algo como Hello Jon, welcome! How can I assist you today?
O bot também é capaz de gerar imagens com a ajuda do Dall-E. Basta prefixar que você solicita com "Dalle" e o bot gerará uma imagem com base no seu texto.

Se você precisar de uma pequena pausa e deseja jogar um pequeno jogo de questionário, você pode fazê -lo chamando esse comando. Não são permitidos mais de 50 perguntas. As perguntas são de diferentes categorias e níveis difíceis e são perguntas múltiplas ou verdadeiras/falsas.
Comandos
quiz 10 para iniciar um teste com 10 perguntasanswer 1 Para responder a uma pergunta com a primeira resposta 
É possível configurar o OpenWeathermap para obter informações sobre o clima atual em seu local.

Exemplo de configuração:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " Todo usuário pode definir aliases de comando próprio. Este é um recurso útil para evitar digitar o mesmo comando todos os dias.
Exemplo de uso
list commands para listar apenas os comandos definidos para o usuário atualadd command 'myCommand' 'trigger job RestoreWorld 7 -> Então ligue para myCommand mais tardeadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand para desencadear este trabalho de Jenkins 
"Comandos" definidos (ex -chamados "macros") são muito mágicos e podem ser definidos nos arquivos de configuração da YAML.
Eles têm um gatilho (uma expressão regular) e têm uma lista de comandos sub -executados. Eles levam em consideração grupos de parâmetros da Regexp - para que possam ser muito flexíveis!
Um exemplo simples para iniciar dois empregos de Jenkins com um determinado nome da filial ao mesmo tempo:
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: " 
Nota : Nos comandos, você pode usar o conjunto completo de recursos de modelo de Go -> Loops/Condições são possíveis!
Além dos recursos usuais de modelo de Go Botty de comandos específicos de bot, estão disponíveis no escopo do modelo.
Uma lista de todas as funções disponíveis (com argumentos e tipos de retorno) pode ser gerada usando o comando list template functions . 
NOTA: Esta funções de modelo pode ser usada em diferentes comandos/recursos:
Com retry ou repeat seu último comando executado, será reexecionado. -> Útil quando um trabalho de Jenkins falhado foi corrigido.
Um pequeno comando que pode ser útil em combinação com o comando command ou como gancho para trabalhos de Jenkins.
Exemplo de comando: delay 10m trigger job DeployWorldwide
Como resposta, você receberá um comando para interromper o trabalho na fila (como stop timer 123456 ). Como todos podem enviar o comando, o comando pode ser usado para anunciar uma implantação e, em dúvida, a execução ainda pode ser interrompida por todos.
reply e send message também são pequenos comandos que são úteis em combinação com os ganchos command ou jenkins.
Exemplos:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...Comando simples se você não conseguir decidir entre diferentes opções
Exemplos
random Pizza Pasta -> produzir "pizza" ou "massas"random Peter Paul Tom Jan -quem tem que aceitar a organização de comida hoje?config.yaml (você pode dar uma olhada no config.example.yaml ) Este comando iniciará o bot, usando o arquivo config.yaml por padrão. Use o argumento -config para usar os arquivos de configuração de outro local.
go run cmd/bot/main.go
Atenção : Crie um arquivo config.yaml primeiro
docker-compose up
A configuração é gerenciada por meio de arquivos. YAML simples que estão armazenando as credenciais para os serviços externos e os comandos personalizados etc.
A maneira mais fácil é apenas ter um arquivo de config.yaml com todas as opções necessárias incluídas, o config.yaml é carregado por padrão. Também é possível dividir a configuração em vários arquivos.
Exemplo de estrutura com vários arquivos de configuração:
secret.yaml contendo as credenciais para os Serviços Externos (Slack, Jenkins) - pode ser gerenciado por Puppet/Ansible etc.jenkins.yaml Configuração de Jenkins Job e seus parâmetros etc.project-X.yaml para uma equipe específicaproject-Y.yaml Para carregar os vários arquivos de configuração, use go run cmd/bot/main.go -config /path/to/config/*.yaml que mesclou todas as configurações.
Para executar este bot, você precisa de um "token de bot" para o seu aplicativo Slack. Consulte a seção de instalação sobre como criar um aplicativo adequado com os tokens necessários.
Para poder iniciar ou monitorar trabalhos de Jenkins, você deve configurar o host e as credenciais primeiro. O usuário precisa de acesso de leitura aos trabalhos e ao direito de acionar trabalhos para seus trabalhos de permissões na lista de permissões.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretPara poder iniciar um trabalho, o trabalho e seus parâmetros precisam ser definidos na configuração.
Um trabalho sem qualquer parâmetro parece muito simples:
jenkins :
jobs :
CleanupJob : Em seguida, você pode usar trigger job CleanupJob ou start job CleanupJob para iniciar o trabalho. Ele também notificará você quando o trabalho for bem -sucedido ou falhar (incl. Log de erros).
Em seguida, um trabalho com dois parâmetros:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allEste trabalho pode lidar com dois parâmetros:
Se você configurar o VSC na configuração, não precisará passar o nome completo da filial, mas poderá usar a pesquisa difusa.
Exemplo:
start job RunTests começaria a "todos" grupos na filial Masterstart job JIRA-1224 unit tentaria encontrar uma filial correspondente para o número do ingresso. (Mensagem de erro se não houver resultado exclusivo de pesquisa!)Agora, um exemplo mais complexo com mais mágica:
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 Passo a passo: o trigger é uma expressão regular para iniciar o trabalho, que pode conter grupos nomeados. Os grupos regexp serão correspondidos aos parâmetros do trabalho automaticamente.
Em seguida, você pode usar deploy bugfix-1234 to test para iniciar o trabalho Jenkins.
NOTA: Você sempre pode iniciar este trabalho também por meio de start job DeployBranch master . O trigger é apenas uma alternativa.
O onsuccess é um gancho que será executado quando um trabalho for iniciado através deste bot. Além disso, também está disponível onsuccess e onerror ... por exemplo, para enviar mensagens de erro personalizadas.
É possível definir comandos periódicos via Crons, usando a biblioteca Robfig/Cron.
Exemplo de configuração
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Para poder resolver nomes de ramificações no Jenkins Trigger, um sistema VCS pode ser configurado (no momento, é apenas STASH/BITBUCKET).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameSe nenhuma configuração for fornecida, não haverá pesquisa de ramificação automatizada e os parâmetros "ramificações" serão passados 1: 1 para o trabalho Jenkins.
Alguns recursos podem não ser necessários em seu ambiente. A maioria dos outros não está ativa se as credenciais não forem fornecidas, como para Jira ou Bitbucket.
Alguns outros podem ser desativados via configuração:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ contém as classes de código do bot: conexão com folga, gerenciamento de usuários, correspondência de comando ...cmd/bot/ Pontos de entrada, também conhecidocommand/ comando real implementando a interface bot.command Se você precisar de um novo comando, que não é implementável com um comando "comando", você deve escrever o código Go.
Existe um aplicativo útil da CLI que emula o aplicativo Slack ... basta conversar com o console local sem nenhuma conexão frouxa! 
make run-cli
make air para usar a "Air Auto Reload Tool".
Existem vários testes que podem ser executados via:
make test
A cobertura do teste é gerada para construir/cobertura.html
make test-coverage