Dieser Slack -Bot verbessert den Workflow von Entwicklungsteams. Besonders mit dem Fokus auf Jenkins, Github, Gitlab und Jira, da die Integration aus dem Box funktioniert. Aber auch benutzerdefinierte Befehle, Makros, Crons und andere projektspezifische Befehle können auf einfache und flexible Weise implementiert werden.
_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 Bereiten Sie zuerst die config.yaml vor, schauen Sie sich einfach auf config-example.yaml an
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go oder make run den Ausführen der Go -Anwendung aus Als Slack -Benutzer müssen Sie nur eine private Nachricht an den BOT -Benutzer/an die zum Ausführen enthaltene Befehl senden. Darüber hinaus können Sie den Bot zu jedem Kanal hinzufügen und Bot-Befehle darin ausführen, indem Sie Ihren Befehl mit @bot_name, z @slack-bot start job DailyDeployment
Hinweis: Sie müssen den Bot in den Kanal einladen, um Befehle zu verarbeiten.
Der Befehl help druckt nur eine Liste aller verfügbaren Befehle dieses Bots. Mit help *command* erhalten Sie eine kurze Beschreibung und einige Beispiele für einen einzelnen Befehl.

Der Bot kann Jenkins Job auf einfache, aber leistungsstarke Weise starten und überwachen.
Standardmäßig sind die Befehle nicht verfügbar und in der "Hilfe" nicht sichtbar, bis die "jenkins.host" in der Konfigurationsdatei definiert ist.
Der Befehl start job startet einen Jenkins -Job und zeigt den aktuellen Fortschritt. ACHTUNG: Nur whitelistete Jobs in der Konfiguration sind begeistert!
Zusätzlich kann jeder Job einen konfigurierbaren trigger haben, der es ermöglicht, benutzerdefinierte Befehle zum Starten von Jobs zu erstellen. (Es ist ein Regexp, der Parameternamen berücksichtigt). ZB "Start Daily Deployment" könnte der Auslöser für einen Jenkins -Job sein. Das Senden dieses Textes an den Bot würde den Job beginnen.
Nach dem Start eines Jobs zeigt der Bot die geschätzte Build -Zeit und einige Aktionsschaltflächen. Dort können Sie die Protokolle öffnen oder den Build direkt abbrechen.
Der Bot kann auch Parameter analysieren und den Zweignamen mithilfe einer Fuzzy -Zweigsuche suchen.
Beispiele:
trigger job DeployBetastart job BackendTests TEST-123 (Suche nach einem vollständigen Zweignamen mit Test-123. z. B. Feature/Test-123-Feature-456) 

Der Bot hat auch die Möglichkeit, einmalige Benachrichtigungen für Jenkins Builds zu erstellen. Dies kann für langjährige Jobs nützlich sein, bei denen die Entwickler auf das Ergebnis warten.
Beispiel:
inform me about build NightlyTests (beobachtet den neuesten Running Build)inform me about build MyJobName #423 (Geben Sie eine Build -Nummer an)inform job MyJobNameErhalten Sie Slack -Nachrichten für alle Prozesserbaute für den angegebenen Job:
Beispiel:
watch JenkinsSelfCheck über einen Aufbau von Jobs JenkinsSelfCheck informiert wirdunwatch JenkinsSelfCheckKleiner Befehl zum Deaktivieren/Aktivieren der Arbeitsplatzausführung auf der Seite von Jenkins.
Beispiel:
disable job NightlyTests (Deaktivieren Sie den Job auf Jenkins)enable job NightlyTestsWenn ein Build fehlgeschlagen ist, können Sie jeden Build wiederholen von:
Beispiel:
retry build NightlyTests (Wiederholungen des letzten Aufbaus eines Jobs)retry build NightlyTests #100 (Wiederholungen gegebenen Gebäude) jenkins nodes listet alle verfügbaren Jenkins -Knoten auf. Der Online-/Offline -Status und die Anzahl der Ausführende sind sichtbar. 
Wenn Sie einfach einen Link zu einer Github/Gitlab/Bitbucket/Stash Pull -Anfrage einfügen, verfolgt der Bot den Status des Tickets!
Sie können auch benutzerdefinierte "zugelassene" Reaktionen festlegen. ZB, um direkt zu sehen, wer oder welche Komponente/Abteilung eine Pull -Anfrage genehmigt, können Sie den Namen der Reaktion oder das Unicode -Zeichenverzeichnis verwenden
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
Zusätzliche Funktionen: Für Bitbucket kann der Bot den aktuellen Build -Status (z. B. aus Jenkins/Bambus usw.) extrahieren und fehlgeschlagen und laufende Builds (Feuerreaktion) als Reaktion (Circle Arrow -Reaktion). Wenn der Build stabil ist, verschwinden die Baureaktionen. 
Der Befehl queue (mit dem Alias then ) kann den angegebenen Befehl anstellen, bis der derzeit ausgeführte Befehl fertig ist.
Beispiel folgendes Szenario: Sie haben einen Build -Job (der einige Minuten dauern kann) und einen Bereitstellungsjob, der auf den Build -Artefakten angewiesen ist. Jetzt können Sie:
trigger job Build feature1234queue trigger job DeployBranch feature1234queue reply Deployment is done!Anderes Beispiel:
delay 1hthen send message #backend coffee time?Um alle laufenden Hintergrundbefehle (wie Jenkins -Jobs oder PR -Beobachter) zu sehen, verwenden Sie diesen Befehl:
list queueDer Bot kann Informationen von JIRA entweder aus einem einzigen Ticket oder einer ganzen Liste von Tickets abfragen.
Standardmäßig sind die Befehle nicht verfügbar und in der "Hilfe" nicht sichtbar, bis der "jira.host" in der Konfigurationsdatei definiert ist.
Beispiele
jira TEST-1234jira 1242 (öffnet das Ticket mit dem konfigurierten Standard -JIRA -Projekt)jql type=bug and status=open (Standardprojekt verwenden standardmäßig)jira "Second city" (Textsuchung von Tickets im Standardprojekt) 

Es ist auch möglich, eine Benachrichtigung zu erhalten, wenn ein bestimmter JIRA -Ticket eine staatliche Änderung vorliegt.
Beispiel
watch ticket PROJ-12234Es ist möglich, Tasten zu erstellen, die beim Drücken der Taste eine beliebige Bot -Aktion durchführen. Slack -Interaktionen

Beispiele:
add button "Start Deployment" "trigger job LiveDeployment"Notiz
Konfigurieren Sie benutzerspezifische Variablen, um das Bot -Verhalten anzupassen. ZB jeder Entwickler hat seine eigene Serverumgebung.
Beispiel: Diese globale Konfiguration haben:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} Jeder Entwickler kann nun aufrufen, sobald diese Befehle wie folgt: set variable defaultSerer foobarX.local um den benutzerdefinierten "StandardServer" zu registrieren.
Wenn Sie jetzt deploy mater aufrufen, werden die master -Zweigstelle auf foobarX.local Server bereitgestellt.
Ein weiteres Beispiel hier eine erweiterte Version, die GO -Vorlagen verwendet. Am Ende generiert der Befehl einen Unterbefehl wie: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> das den Link zum Slack-Kanal veröffentlicht.
- 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 Der Benutzer kann seine Standardumgebung einmal mithilfe set variable serverEnvironment aws-02 definieren.
Anschließend bereitet der deploy feature-123 die Filiale in der definierten aws-02 Umgebung bereit. Jeder Benutzer kann seine eigenen Variablen definieren.
Es ist auch möglich, ein ChatGPT -ähnliches Gespräch mit der offiziellen OpenAI -Integration (GPT3.5) zu führen!

Geben Sie einfach "Openai" oder "Chatgpt" ein, um einen neuen Thread zu erstellen, der sich wie die bekannte Chatgpt-Seite verhält. Der Inhalt der letzten 10 Nachrichten wird als Kontext verwendet. Damit es funktioniert, muss in der Konfiguration ein gültiger "openai.api_key" bereitgestellt werden.
Erweiterte Konfiguration:
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 logBei Verwendung des Befehls "OpenAI XXX" in einem vorhandenen Thread werden die vorherigen Nachrichten als Kontext für weitere Aufrufe verwendet.
Es ist auch möglich, die Funktion in den Vorlagen zu verwenden (wie in benutzerdefinierten Befehlen oder Kammern).
{{ openai "Say some short welcome words to @Jon_Doe"}} würde so etwas wie Hello Jon, welcome! How can I assist you today?
Der Bot kann auch Bilder mit Hilfe von Dall-e generieren. Präfix Sie einfach mit "Dalle" und erzeugt der Bot ein Bild basierend auf Ihrem Text.

Wenn Sie eine kleine Pause benötigen und ein kleines Quizspiel spielen möchten, können Sie dies tun, indem Sie diesen Befehl anrufen. Nicht mehr als 50 Fragen sind erlaubt. Die Fragen stammen aus verschiedenen Kategorien und schwierigen Ebenen und sind entweder Multiple -Choice- oder True/False -Fragen.
Befehle
quiz 10 , um ein Quiz mit 10 Fragen zu startenanswer 1 um eine Frage mit der ersten Antwort zu beantworten 
Es ist möglich, OpenWeatherMap einzurichten, um Informationen über das aktuelle Wetter an Ihrem Standort zu erhalten.

Beispielkonfiguration:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " Jeder Benutzer kann eigene Befehls -Aliase definieren. Dies ist eine praktische Funktion, um das Tippen des gleichen Befehls jeden Tag zu vermeiden.
Beispiel Verwendung
list commands , um die definierten Befehle für den aktuellen Benutzer aufzulistenadd command 'myCommand' 'trigger job RestoreWorld 7 myCommandadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand ausführen, um diesen Jenkins -Job auszulösen 
Definierte "Befehle" (früher genannt "Makros") sind sehr magisch und können in den YAML -Konfigurationsdateien definiert werden.
Sie haben einen Auslöser (einen regulären Ausdruck) und eine Liste von Subbefehlen, die ausgeführt werden. Sie berücksichtigen Parametergruppen von Regexp - so können sie sehr flexibel sein!
Ein einfaches Beispiel, um zwei Jenkins -Jobs mit einem bestimmten Zweignamen gleichzeitig zu starten:
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: " 
Hinweis : In den Befehlen können Sie die vollständigen Vorlagenfunktionen von GO -> Loops/Bedingungen verwenden!
Neben den üblichen Vorlagenfunktionen von GO sind eine Reihe von Bot -spezifischen Befehlen im Vorlagenbereich erhältlich.
Eine Liste aller verfügbaren Funktionen (mit Argumenten und Rückgabetypen) kann mit dem Befehl list template functions generiert werden.
Hinweis: Diese Vorlagenfunktionen können in verschiedenen Befehlen/Funktionen verwendet werden:
Mit retry oder repeat Ihres letzten ausgeführten Befehls wird erneut ausgeführt. -> Nützlich, wenn ein fehlgeschlagener Jenkins -Job repariert wurde.
Ein kleiner Befehl, der in Kombination mit command oder als Haken für Jenkins Jobs nützlich sein könnte.
Beispielbefehl: delay 10m trigger job DeployWorldwide
Als Antwort erhalten Sie einen Befehl, um den Job in der Warteschlange zu stoppen (wie stop timer 123456 ). Wie jeder den Befehl senden kann, kann der Befehl verwendet werden, um eine Bereitstellung anzukündigen, und im Zweifelsfall kann die Ausführung immer noch von allen gestoppt werden.
reply und send message sind auch kleine Befehle, die in Kombination mit command oder Jenkins -Hooks nützlich sind.
Beispiele:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...Einfacher Befehl Wenn Sie nicht in der Lage sind, zwischen verschiedenen Optionen zu entscheiden
Beispiele
random Pizza Pasta -> entweder "Pizza" oder "Pasta" produzierenrandom Peter Paul Tom Jan -> Wer muss heute über die Organisation von Lebensmitteln gehen?config.yaml erstellen (Sie können sich config.example.yaml ansehen) Dieser Befehl startet den Bot standardmäßig mit der Datei config.yaml . Verwenden Sie das Argument -config , um die Konfigurationsdatei (n) von einem anderen Ort aus zu verwenden.
go run cmd/bot/main.go
Achtung : Erstellen Sie zuerst eine config.yaml -Datei
docker-compose up
Die Konfiguration wird über einfache .yaml -Dateien verwaltet, die die Anmeldeinformationen für die externen Dienste und die benutzerdefinierten Befehle usw. speichern.
Der einfachste Weg ist, nur eine config.yaml -Datei mit allen benötigten Optionen enthalten zu haben. Die config.yaml wird standardmäßig geladen. Es ist auch möglich, die Konfiguration in mehrere Dateien aufzuteilen.
Beispielstruktur mit mehreren Konfigurationsdateien:
secret.yaml mit den Anmeldeinformationen für die externen Dienste (Slack, Jenkins) - kann von Puppet/Ansible usw. verwaltet werden usw.jenkins.yaml Konfiguration von Jenkins Job und deren Parameter usw.project-X.yaml benutzerdefinierte Befehle für ein bestimmtes Teamproject-Y.yaml Um die Mehrfachkonfigurationsdateien zu laden, verwenden Sie go run cmd/bot/main.go -config /path/to/config/*.yaml der alle Konfigurationen zusammengeschlossen hat.
Um diesen Bot auszuführen, benötigen Sie ein "Bot -Token" für Ihre Slack -Anwendung. Siehe Abschnitt Installation, wie Sie eine ordnungsgemäße App mit den benötigten Token erstellen.
Um Jenkins Jobs zu starten oder zu überwachen, müssen Sie zuerst den Host und die Anmeldeinformationen einrichten. Der Benutzer benötigt Lesezugriff auf die Jobs und das Recht, Jobs für Ihre whitelistischen Jobs auszulösen.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretUm einen Job zu beginnen, müssen der Job und seine Parameter in der Konfiguration definiert werden.
Ein Job ohne Parameter sieht sehr einfach aus:
jenkins :
jobs :
CleanupJob : Anschließend können Sie trigger job CleanupJob verwenden oder start job CleanupJob , um den Job zu starten. Es wird Sie auch benachrichtigen, wenn der Job erfolgreich oder fehlgeschlagen ist (inkl. Fehlerprotokoll).
Als nächstes einen Job mit zwei Parametern:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allDieser Job kann zwei Parameter verarbeiten:
Wenn Sie den VSC in der Konfiguration einrichten, müssen Sie den vollständigen Zweignamen nicht übergeben, können aber die Fuzzy -Suche verwenden.
Beispiel:
start job RunTests würden "alle" Gruppen in Master Branch beginnenstart job JIRA-1224 unit würde versuchen, eine passende Filiale für die Ticketnummer zu finden. (Fehlermeldung, wenn es kein eindeutiges Suchergebnis gibt!)Jetzt ein komplexeres Beispiel mit mehr Magie:
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 Schritt für Schritt: Der trigger ist ein regulärer Ausdruck, um den Job zu starten, der benannte Gruppen enthalten kann. Die REGEXP -Gruppen werden automatisch auf die Jobparameter abgestimmt.
Anschließend können Sie deploy bugfix-1234 to test .
Hinweis: Sie können diesen Job immer auch über start job DeployBranch master starten. Der trigger ist nur eine Alternative.
Der onsuccess ist ein Haken, der ausgeführt wird, wenn ein Job über diesen Bot gestartet wird. Zusätzlich ist onsuccess und onerror verfügbar ... zB zum Senden benutzerdefinierter Fehlermeldungen.
Es ist möglich, periodische Befehle über Crons mit der Robfig/Cron -Bibliothek zu definieren.
Beispielkonfiguration
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Um Zweignamen in Jenkins Trigger auflösen zu können, kann ein VCS -System konfiguriert werden (im Moment ist es nur Stash/Bitbucket).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameWenn keine Konfiguration bereitgestellt wird, gibt es keine automatisierte Filiale und die Parameter "Zweig" werden 1: 1 an den Jenkins -Job übergeben.
Einige Funktionen sind in Ihrer Umgebung möglicherweise nicht erforderlich. Die meisten sind nicht aktiv, wenn die Anmeldeinformationen nicht zur Verfügung gestellt werden, wie für JIRA oder Bitbucket.
Einige andere können über die Konfiguration deaktiviert werden:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ enthält die Codeklassen des Bots: Verbindung zu Slack, Benutzerverwaltung, Befehlsübereinstimmung ...cmd/bot/ Einstiegspunkte aka Main.go für den Bot und das CLI -Testwerkzeugcommand/ realer Befehl implementieren Sie die Schnittstelle von Bot.Command Wenn Sie einen neuen Befehl benötigen, der mit einem Befehl "Befehl" nicht implementiert werden kann, müssen Sie Go -Code schreiben.
Es gibt eine praktische CLI -Anwendung, die die Slack -Anwendung emuliert ... Chatten Sie einfach mit Ihrer lokalen Konsole ohne Slack -Verbindung! 
make run-cli
make air , um das "Air Auto Reload Tool" zu verwenden.
Es gibt eine Reihe von Tests, die über:
make test
Die Testabdeckung wird erstellt, um zu bauen/abzusetzen.html
make test-coverage