Verwenden von Slack und ChatOps zum Erstellen neuer Projekte

Ich wollte schon lange einen bauen Locker bot seit einiger Zeit, nicht aus einem bestimmten Grund, sondern einfach nur, um es selbst auszuprobieren.

Glücklicherweise gibt es viele großartige Tools, die den Prozess für uns vereinfachen. Ich habe die verwendet Botkit Rahmen um einen Bot zu bauen, der mit Benutzern interagiert [Slack] um neue Projekte zu erstellen GitLab und Codeship ohne die Slack-Anwendung zu verlassen.

Was ist ChatOps?

ChatOps ist keine bestimmte Sache, sondern eher die Verbindung vieler Dinge. Im Kern verbindet es Menschen mit Tools und Automatisierung, um die Kommunikationsprobleme zu lösen, die der Softwareentwicklung innewohnen.

Sie können viele Tools direkt mit Slack verbinden und Kommunikationskanäle erstellen, die Sie benachrichtigen, wenn Server ausfallen, Pull-Anforderungen zusammengeführt werden oder der Datenverkehr steigt.

In diesem Beispiel wollte ich einen Prozess für Teammitglieder erstellen, um neue Projekte und Repositorys mit einem Dialogfeld direkt in Slack zu erstellen.

Warum ist das wichtig? Ich bin froh, dass du gefragt hast! Die Rationalisierung von Prozessen kann das Leben aller ein wenig einfacher machen. Als Entwickler kann ich ein Projekt in Sekunden erstellen, nicht in Minuten (oder sogar noch länger). Als DevOps-Ingenieur kann ich Vorlagen erstellen, die ohne Schulungszeit für die Einführung einfach neu erstellt und optimiert werden können. Als Entwicklungsmanager sehe ich, dass die Produktionszeiten steigen und die Frustration sinkt.

Erstellen Sie eine Slack-App

Slack hat ein Framework für die App-Entwicklung geschaffen, mit dem der Einstieg wirklich einfach ist. Ich werde in diesem Artikel nicht zu viel Zeit damit verbringen, all die verschiedenen Möglichkeiten zu behandeln, die mit dem Erstellen einer Slack-App einhergehen, aber ich möchte behandeln, wie man loslegt.

Neue App erstellen

Bildschirm „App erstellen“ von Slack

Ich habe meinen “Shipwright” genannt, da er versandfähige Dinge baut. Fühlen Sie sich frei, Ihren zu benennen, was Sie möchten.

Sobald Sie die App erstellt haben, sollten Sie diesen Bildschirm sehen.

Grundlegende Informationen zur Slack-App

Im Moment können wir das meiste davon überspringen und später darauf zurückkommen. Sie benötigen jedoch die App-Anmeldeinformationen, um loszulegen.

Slack-App-Anmeldeinformationen

Aufbau des Bots

Ich habe mich entschieden, Botkit zu verwenden, um meinen Chatbot zu bauen. Sie haben ein großartiges Framework, um verschiedene Bots zu erstellen, und es funktioniert gut mit Slack.

Sie können den Code unter herunterladen https://gitlab.com/kellyjandrews/shipwright.

Einrichten der Umgebungsvariablen

Das Projekt wird mit eingerichtet Docker und Docker Compose. Sie müssen diese auch installiert haben, um dieses Projekt auszuführen. In dem docker-compose.yml es gibt einen Hinweis auf a .env Datei, die Sie einrichten müssen.

SLACK_TOKEN=
SLACK_ID=
SLACK_SECRET= GITLAB_TOKEN= CODESHIP_USER=
CODESHIP_PW=
CODESHIP_ORG_NAME=

Locker

Das SLACK_TOKEN, SLACK_ID und SLACK_SECRET Umgebungsvariablen stammen aus der App, die wir im vorherigen Schritt eingerichtet haben. Kopieren Sie diese und fügen Sie sie direkt nach dem Gleichheitszeichen ein.

Codeship

Das Codeship-API verwendet Ihren Benutzernamen und Ihr Passwort zur Authentifizierung. Es wird empfohlen, einen Benutzer speziell für die API-Nutzung anzulegen.

Dies erfordert, dass der API-Benutzer Zugriff auf das richtige Team in Codeship sowie einen passenden Gitlab-Benutzer hat, um den Dienst mit Codeship zu verbinden.

Für anfängliche Testzwecke können Sie Ihren aktuellen Benutzer verwenden und sicherstellen, dass Sie Gitlab als Verbindung eingerichtet haben. Sie finden Ihre verbundenen Dienste unter https://app.codeship.com/authentications.

Codeship Gitlab Connected

In diesem Beispiel wird nur der Organisationsname von Codeship verwendet. Während der API-Authentifizierung stimmt es mit dem Namen überein, um das Projekt in der richtigen Organisation zu erstellen.

Sie finden den Namen der Organisation auf dem Einstellungsbildschirm.

Gitlab

Stellen Sie zunächst sicher, dass Sie bei demselben Benutzer angemeldet sind, der mit Codeship verbunden ist. Klicken Sie dann in der oberen rechten Ecke der Gitlab-Benutzeroberfläche auf das Benutzersymbol, um auf das Dropdown-Menü zuzugreifen, und wählen Sie es aus Settings. Navigieren Sie dann zu Access Tokens im Menü auf der linken Seite. Auf diesem Bildschirm können Sie eine erstellen personal access token.

Gitlab-Zugriffstoken-Bildschirm

Sie benötigen nur API-Zugriff. Geben Sie ihm einen Namen und klicken Sie dann Create personal access token. Die Seite wird aktualisiert und zeigt das Token oben an. Sie werden dies nur einmal sehen, also kopieren Sie es jetzt und fügen Sie es in die ein .env Datei.

Gitlab-Zugriffstoken erstellt

Betreiben Sie Ihren Bot lokal

Slack verwendet Webhooks, um mit Apps zu kommunizieren. Bevor Sie Ihren Bot in die Produktion pushen, möchten Sie die Funktionalität mit Ihrer lokalen Entwicklungsumgebung testen, und eine der einfachsten Möglichkeiten, die ich dafür gefunden habe, ist die Verwendung von Rock.

Ngrok öffnet eine sichere URL, damit Sie sich direkt mit Ihrem Localhost verbinden können. Die Installation ist einfach, und die Anweisungen finden Sie hier – https://ngrok.com/download.

Nach der Installation müssen Sie eine Sitzung starten, die die Außenwelt mit Ihrer verbindet localhost am Hafen 3000.

$ ngrok http 3000 ngrok by @inconshreveable (Ctrl+C to quit) Session Status online
Version 2.2.8
Region United States (us)
Web Interface 
Forwarding  -> localhost:3000
Forwarding  -> localhost:3000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00

An diesem Punkt können wir den Docker-Container starten und die App-Einrichtung in Slack abschließen.

$ docker-compose up // build output Initializing Botkit v0.6.8
info: ** Using simple storage. Saving data to ./db_slackbutton_bot/
debug: Setting up a handler for spawned
debug: Setting up a handler for heard_trigger
debug: Setting up a handler for command_triggered
debug: Setting up a handler for remote_command_end
debug: Setting up a handler for slash_command
debug: Setting up a handler for dialog_submission
info: ** Starting webserver on port 3000
info: ** Serving webhook endpoints for Slash commands and outgoing webhooks at: 
info: ** Serving login URL: 
info: ** Serving outh return endpoint: 

Wenn Sie auf Probleme stoßen, überprüfen Sie Ihre Umgebungsvariablen, stoppen Sie den Container und erstellen Sie ihn neu. Wenn Sie andere Probleme haben, können Sie dies gerne tun ein Problem eröffnen und lass es mich wissen, wir können versuchen, es herauszufinden.

Was ist dieser Code?

Das Botkit-Dokumentation ist manchmal schwer zu sortieren. Die Schwierigkeit bei jedem Framework besteht darin, dass es so viele Optionen gibt, dass Sie sich leicht verirren können, wenn Sie versuchen, genau das zu finden, was Sie brauchen.

Ich werde nicht alles in Bezug auf Botkit behandeln, aber ich wollte einige Elemente aus dem Projekt hervorheben, die Ihnen helfen könnten, herauszufinden, was passiert, und Ihnen einen Sprung auf Ihren Bot geben.

Starten des Webservers

Ich verwende einige interaktive Elemente, für die wir OAuth und Webhooks verwenden müssen. Mit Botkit werden die richtigen Endpunkte erstellt, die für die Interaktion mit Slack erforderlich sind, sodass ich mir darüber keine Gedanken machen muss.

// set up a botkit app to expose oauth and webhook endpoints
controller.setupWebserver(process.env.port, () => { controller.createWebhookEndpoints(controller.webserver); controller.createOauthEndpoints(controller.webserver, (err,req,res) => { if (err) { res.status(500).send('ERROR: ' + err); } else { res.send('Success!'); } });
});

Handhabung der Slash-Befehle

Slash-Befehle werden mit einem Event-Handler in Botkit behandelt. Ich habe es so eingerichtet, dass ich später mit einer switch-Anweisung problemlos zusätzliche Funktionen hinzufügen kann. Das message Objekt hat a command Eigenschaft, mit der Sie übereinstimmen können.

controller.on('slash_command', (bot, message) => { let command = message.command; switch (command) { case '/create': return createDialog(bot, message); default: return; } });

Erstellen des Dialogs

Die Schnittstelle zum Erstellen von Dialogelementen in Botkit ist wirklich sehr nützlich, und die Dokumente leicht verständlich machen.

function createDialog(bot, message) { var dialog = bot.createDialog('Create New Project','callback_id','Create') .addText('Project Name','projectName','') .addSelect('Project Type','projectType',null,[{label:'Pro',value:'pro'},{label:'Basic',value:'basic'}],{placeholder: 'Select One'}); bot.replyPrivate(message, 'Ok, let\'s create a new project'); bot.replyWithDialog(message, dialog.asObject());
}

Während der Projekteinrichtung möchte ich einen Namen und einen Projekttyp erhalten, die an Gitlab und Codeship übergeben werden. Die Möglichkeiten hier sind ziemlich aufregend – aber im Moment habe ich es einfach gehalten.

Senden des Dialogs

Sobald der Dialog gesendet wurde, wollte ich über die Direct-Messaging-Fähigkeiten des Bots mit dem Benutzer kommunizieren. Dieser Teil war kniffliger als erwartet, aber nach einigem Ausprobieren konnte ich bekommen, was ich wollte.

controller.on('dialog_submission', (bot, message) => { const projectType = message.submission.projectType; const projectName = message.submission.projectName; bot.dialogOk(); bot.createPrivateConversation(message, (err,dm) => { dm.say(`I am now creating the Codeship ${projectType} project and \`${projectName}\` repo.`); gitlab.createRepo(projectName) .then(gitlab_res => { dm.say(`The GitLab Url is ${gitlab_res.web_url}`); return codeship.createProject(gitlab_res.ssh_url_to_repo, projectType); }) .then(codeship_res => { dm.say(`The Codeship Project Url is  dm.activate(); }) .catch(err => { // respond with error messages here console.log(err); }); }); });

Insgesamt ist der Code nicht zu komplex, was mich gefreut hat. Botkit ermöglichte es mir, einige solide Funktionen ohne viel Kopfzerbrechen zu erstellen. Das Projekt enthält auch Code zum Verbinden der Gitlab- und Codeship-APIs, den Sie ebenfalls auschecken können.

Funktionalität hinzufügen

Nachdem Sie den Bot eingerichtet und ausgeführt haben, muss Slack einige Berechtigungen einrichten und dann in Ihrem Team installieren.

Zurückkommen zu aus dem vorherigen Schritt und klicken Sie auf die App, die Sie erstellt haben.

Interaktive Komponenten

Damit das Dialogfeld ordnungsgemäß funktioniert, müssen Sie die Anforderungs-URL für interaktive Komponenten mithilfe von einrichten ngrok Pfad und /slack/receive.

Interaktive Komponenten der Slack-App

Slash-Befehle

Ich entschied mich für einen Slash-Befehl, um Benutzern das Starten des Workflows zu ermöglichen. Mein aktuelles Setup erwartet keine zusätzlichen Details, sondern verwendet nur die /create Befehl. Die Anforderungs-URL ist dieselbe wie die URL der interaktiven Komponente /slack/receive.

Slack-App-Slash-Befehle

Wenn ich wollte, können Sie auch den Befehlstext vom Benutzer erhalten, wodurch möglicherweise auch ein Dialogfeld eingespart wird. Der Textwert ist im Botkit-Objekt verfügbar, das im Schrägstrichbefehl zurückgegeben wird.

OAuth & Berechtigungen

In diesem Abschnitt können Sie der App Bereiche hinzufügen, was wir in diesem Fall vorerst nicht tun müssen. Für die Ersteinrichtung müssen wir eine Umleitungs-URL hinzufügen.

Auch hier benötigen Sie Ihre ngrok URL und fügen Sie die Route hinzu /oauth.

Umleitungs-URLs für Slack-Apps

Bot-Benutzer

Schließlich müssen Sie Ihren Bot-Benutzer hinzufügen. Dies ist der Name, der direkt in Slack angezeigt wird. Ich habe meine angerufen shipwright auch hier, aber fühlen Sie sich frei, Ihrem Bot einen Namen zu geben, der für Sie sinnvoll ist.

Slack-App-Bot-Benutzer

Installiere die App

Sobald du alles eingerichtet hast, musst du jetzt die App in Slack installieren. Klick auf das Install App Menüpunkt und installieren Sie die App von hier aus. Während des Erstellens können Sie hier auch die App neu installieren, wenn Sie Berechtigungen ändern und diese autorisieren müssen.

Slack-Install-App

Slack-Autorisierungs-App

Melden Sie sich bei Ihrer App an

Nachdem Sie die Anwendung installiert haben, müssen Sie sich auch anmelden, um Ihren Benutzer zu autorisieren.

Besuchen Sie von einem Webbrowser aus, auf den Sie verweisen müssen http://1234abcd.ngrok.io/login. Klicken Sie dann auf die Schaltfläche Autorisieren. Dadurch wird die Anwendung autorisiert und die Teaminformationen im gespeichert db_slackbutton_bot Verzeichnis.

Testen Sie es aus

Wenn alles installiert, ausgeführt und authentifiziert ist, sollten Sie jetzt in Slack gehen und den Befehl eingeben können /create. Dadurch wird das Dialogfeld angezeigt, in das Sie die Informationen eingeben können.

Slack-UI-Projekt erstellen

Sobald Sie Ihre Informationen hinzugefügt und auf Erstellen geklickt haben, aktualisiert Sie der Bot in einer Direktnachricht, wenn Sie fertig sind, und stellt Ihnen die URLs zur Verfügung, die Sie benötigen, um loszulegen.

Überlegungen

Ein paar Dinge, in die ich noch nicht viel Zeit in dieses Projekt investiert habe – Fehlerbehandlung und Sicherheit.

Wenn derzeit etwas schief geht, wird es nicht gut gehen. Es gibt ein paar Fehlerpunkte bei den externen API-Aufrufen, die leicht fehlschlagen können – doppelte Projekte, Authentifizierungsfehler und so weiter.

Außerdem kann an dieser Stelle jeder Projekte erstellen, wenn er Zugriff auf Slack hat. Ich müsste hier höchstwahrscheinlich ein zusätzliches Stück hinzufügen, um sicherzustellen, dass diejenigen, die etwas erschaffen können, begrenzt sind.

Im Allgemeinen ist die Belohnung hier grandios. Ich kann schließlich einige Vorlagenprojekte erstellen, um sie für den Anfang zu duplizieren, ich kann die Funktionalität für jedes Projekt in weniger als einer Minute einrichten. Zuvor waren mehrere Klicks auf zwei Apps erforderlich, um die Dinge einzurichten. Die Codeship-API ermöglicht es mir, aus Gründen der Konsistenz auch spezifische Pro/Basic-Konfigurationen zu erstellen.

Zusätzlich zu Codeship und Gitlab könnte ich auch Anwendungen zur Fehlerprotokollierung und App-Metriken oder alles andere einrichten, was ich normalerweise für ein Projekt benötige. Mit dem Dialogfeld können Sie auch Kontrollkästchen hinzufügen, um diese optional zu machen. Viel Potenzial hier für einige großartige Funktionen.

Als erstes Projekt in der Welt von ChatOps fühle ich mich wirklich gut darüber, wie die Dinge zustande gekommen sind. Es gibt noch einige weitere Elemente, die ich hinzufügen möchte, und ich würde auch gerne Ihre Vorschläge hören – Sie können gerne ein Problem im Repo hinzufügen https://gitlab.com/kellyjandrews/shipwright/issues.

Similar Posts

Leave a Reply

Your email address will not be published.