Рубрики
Uncategorized

Использование Slack и Chatops для создания новых проектов

Я уже давно хотел построить слабый бот, не по какой -либо конкретной причине, а просто для того, чтобы попробовать его для себя. Этот пост поможет вам узнать, как вы также можете построить свои собственные боты!. Tagged с DevOps, Chatops, Bot.

Я хотел построить Слаб Бот некоторое время, не по какой -либо конкретной причине, а просто для того, чтобы попробовать это для себя.

К счастью, есть много отличных инструментов, чтобы упростить процесс для нас. Я использовал Botkit структура Чтобы создать бота, который взаимодействует с пользователями в [Slack], чтобы создать новые проекты в Gitlab и Кодекс не оставляя слабых применений.

Что такое чаты?

Chatops не какая -то конкретная вещь, а больше взаимосвязи многих вещей. По своей сути, он соединяет людей с инструментами и автоматизацией, чтобы ослабить проблемы связи, присущие разработке программного обеспечения.

Вы можете подключить много инструментов непосредственно к Slack и создать каналы связи, которые могут предупредить вас, когда серверы не работают, запрашиваемые запросы объединяются, или трафик увеличивается.

В этом примере я хотел создать процесс для членов команды для создания новых проектов и репозиториев с диалоговым окном прямо внутри Slack.

Почему это важно? Я рад, что ты спросил! Упрощение любого процесса может немного облегчить жизнь. Как разработчик, я могу создать проект за считанные секунды, а не минуты (или еще дольше). Как инженер DevOps, я могу создавать шаблоны, которые можно легко воссоздать и настраивать без времени обучения для развертывания. Как менеджер DEV, я вижу, как время производства увеличивается, и разочарование снижается.

Создать приложение Slack

Слэк создал основу для разработки приложений, которая действительно проста в начале. Я не буду тратить слишком много времени в этой статье, охватывающей все различные возможности, которые поставляются с приложением для строительства Slack, но я хочу осветить, как начать.

Создать новое приложение

  1. Перейти к https://api.slack.com/apps?new_app=1
  2. Дайте вашему приложению имя
  3. Выберите рабочее пространство, где вы хотите прикрепить приложение
  4. Нажмите Создать приложение

Я назвал свой «Shipwright», так как он строит перевозку. Не стесняйтесь называть свое все, что вы хотели бы.

Как только вы создали приложение, вы должны увидеть этот экран.

На данный момент мы можем пропустить большую часть этого и вернуться к нему позже. Однако вам понадобятся учетные данные приложения, чтобы начать работу.

Построение бота

Я решил использовать Botkit для создания своего чата -бота. У них отличная рамка для построения разных ботов, и это хорошо работает со Slack.

Вы можете скачать код в https://gitlab.com/kellyjandrews/shipwright Анкет

Настройка переменных среды

Проект настроен с использованием Docker и Docker Compose. Вам также понадобятся те, кто будет установлен, чтобы запустить этот проект. В Docker-compose.yml Есть ссылка на .env Файл, который вам нужно будет настроить.

SLACK_TOKEN=
SLACK_ID=
SLACK_SECRET=

GITLAB_TOKEN=

CODESHIP_USER=
CODESHIP_PW=
CODESHIP_ORG_NAME=

Ослабление

Slack_token , Slack_id и Slack_secret Переменные среды взяты из приложения, которое мы настроили на предыдущем шаге. Скопируйте и вставьте их непосредственно после равного знака.

Код

Codeship API Будет использовать ваше имя пользователя и пароль для аутентификации. Рекомендуется создать пользователя специально для использования API.

Это потребует, чтобы пользователь API имел доступ к правильной команде в Codeship, а также пользователю Gitlab, который соответствует, чтобы подключить службу к CodeShip.

Для начальных целей тестирования вы можете использовать своего текущего пользователя и убедиться, что у вас есть настройка Gitlab в качестве соединения. Вы можете найти свои подключенные сервисы по адресу https://app.codeship.com/authentications Анкет

В этом примере используется только название организации из Codeship. Во время аутентификации API он будет соответствовать имени для создания проекта в правильной организации.

Вы можете найти название организации на экране настроек.

Гитлаб

Во -первых, убедитесь, что вы вошли в того же пользователя, который подключен к CodeShip. Затем в верхнем правом углу пользовательского интерфейса Gitlab нажмите значок пользователя, чтобы получить доступ к раскрывающемуся меню, и выберите Настройки Анкет Затем перейдите к Токены доступа в левой стороне меню. На этом экране вы можете создать Персональный токен доступа Анкет

Вам потребуется только доступ API. Дайте ему имя, а затем нажмите Создайте токен личного доступа Анкет Страница обновляет и отобразит токен вверху. Вы увидите это только один раз, поэтому обязательно скопируйте его сейчас и вставьте в .env файл.

Запуск вашего бота на местном уровне

Slack использует Webhooks для общения с приложениями. Прежде чем подтолкнуть своего бота к производству, вы хотите проверить функциональность в местной среде разработчика, и один из самых простых способов, которыми я обнаружил, — это использование Ngrok Анкет

Ngrok Откроет безопасный URL -адрес, чтобы позволить вам подключиться непосредственно к местному дому. Установка проста, и инструкции можно найти здесь — https://ngrok.com/download Анкет

После установки вам нужно запустить сеанс, который подключит внешний мир с вашим Localhost на порту 3000 Анкет

$ ngrok http 3000

ngrok by @inconshreveable                                                                                                                                 (Ctrl+C to quit)

Session Status                online
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://1234ABCD.ngrok.io -> localhost:3000
Forwarding                    https://1234ABCD.ngrok.io -> localhost:3000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

На этом этапе мы можем запустить контейнер Docker и закончить настройку приложения в Slack.

$ 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: http://0.0.0.0:3000/slack/receive
info: ** Serving login URL: http://0.0.0.0:3000/login
info: ** Serving outh return endpoint: http://0.0.0.0:3000/oauth

Если вы столкнетесь с проблемами, проверьте переменные среды, остановите контейнер и восстановите. Если у вас есть другие проблемы, не стесняйтесь Откройте проблему И дайте мне знать, мы можем попытаться выяснить это.

Что это за код?

Botkit документация Иногда трудно сортировать. Сложность с любой структурой заключается в том, что существует так много вариантов, что вы можете легко заблудиться, пытаясь найти то, что вам точно нужно.

Я не собираюсь освещать все, что касается Botkit, но хотел выделить несколько предметов из проекта, которые могут помочь вам выяснить, что происходит, и дать вам прыжок на вашего бота.

Запуск веб -сервера

Я использую некоторые интерактивные элементы, которые требуют от нас использования OAuth и Webhooks. Используя Botkit, он создаст правильные конечные точки, необходимые для взаимодействия с Slack, поэтому мне не нужно беспокоиться об этом.

// 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!');
    }
  });
});

Обработка команд SLASH

Команды SLASH обрабатываются с использованием одного обработчика событий в Botkit. Я настроил его, чтобы я мог легко добавить дополнительную функциональность позже, используя оператор переключателя. Сообщение Объект имеет Команда Собственность, с которой вы можете сопоставить.

controller.on('slash_command', (bot, message) => {
  let command = message.command;

  switch (command) {
  case '/create':
    return createDialog(bot, message);
  default:
    return;
  }

});

Создание диалога

Интерфейс для создания элементов диалога в Botkit действительно весьма полезен, и Документы Сделайте это легко понять.

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());
}

Во время настройки проекта я хочу получить название и тип проекта, чтобы перейти в Gitlab и CodeShip. Возможности здесь довольно захватывающие — но сейчас я держал это просто.

Отправка диалога

После того, как диалог будет представлен, я захотел обратиться к пользователю через прямые возможности для обмена сообщениями BOT. Эта часть была более сложной, чем ожидалось, но после некоторой проб и ошибок я смог получить то, что хотел.

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 https://app.codeship.com/projects/${codeship_res.project.id}`);
        dm.activate();
      })
      .catch(err => {
        // respond with error messages here
        console.log(err);
      });
  });

});

В целом, код не слишком сложный, что сделало меня счастливым. Botkit позволил мне создать некоторую твердую функциональность без большой головной боли. Проект также имеет некоторый код для подключения API Gitlab и Codeship, которые вы также можете проверить.

Добавление функциональности

Теперь, когда у вас есть бот и запущен, Slack требуется несколько разрешений, установленных, а затем установлено в вашей команде.

Вернуться в https://api.slack.com/apps На более раннем шаге и нажмите на созданное вами приложение.

Интерактивные компоненты

Чтобы диалоговое окно работало правильно, вам нужно будет настроить URL -адрес запроса интерактивных компонентов, используя ngrok Путь и /Slack/получить Анкет

Слэш команды

Я решил использовать команду SLASH, чтобы позволить пользователям запустить рабочий процесс. Моя текущая настройка не ожидает никакой дополнительной информации, но просто использует /Создать командование URL -адрес запроса такой же, как и URL интерактивных компонентов с /Slack/получить Анкет

Если я захотел, вы также можете получить командный текст от пользователя, что может также сохранить диалоговое окно. Текстовое значение доступно в объекте Botkit, возвращаемом в команде SLASH.

Оаут и разрешения

Этот раздел позволяет вам добавлять приложения в приложение, что нам не нужно делать в этом случае. Нам нужно добавить URL -адрес перенаправления для первоначальной настройки.

Опять же, вам понадобится ваш ngrok URL и добавьте маршрут /oauth Анкет

Пользователь бота

Наконец, вам нужно добавить пользователя бота. Это будет имя, которое отображается в Slack напрямую. Я позвонил своему корабельный Здесь также, но не стесняйтесь называть своего бота что -то, что имеет смысл для вас.

Установите приложение

Как только у вас все настройка, теперь вам нужно установить приложение в Slack. Нажмите на Установить приложение Пункт меню и установите приложение отсюда. По мере того, как вы строите, это также, где вы можете переустановить приложение, если вы измените разрешения и необходимо разрешить их.

Войдите в свое приложение

После того, как вы установите приложение, вам также нужно будет войти в систему для авторизации вашего пользователя.

Из веб -браузера, посетите, вам нужно будет указать на http://1234abcd.ngrok.io/login . Затем нажмите кнопку «Авторизировать». Это разрешит приложение и сохранит информацию команды в db_slackbutton_bot каталог.

Проверьте это

Со всем установленным, запущенным и аутентифицированным, вы теперь сможете перейти в Slack и ввести команду /Создайте . Это поднимет диалоговое окно для вас, чтобы ввести информацию.

После того, как вы добавите свою информацию и нажмите «Создать», бот будет обновлять вас после завершения прямого сообщения, предоставив вам URL -адреса, которые вам нужно начать.

Соображения

Несколько вещей, которые я еще не уделял много времени на этот проект — обработка ошибок и безопасность.

В настоящее время, если что -то терпит неудачу, это не пойдет хорошо. Есть пара пунктов сбоя с внешними вызовами API, которые могут

Кроме того, любой может создавать проекты на данный момент, если у них есть доступ к Slack. Скорее всего, мне нужно добавить здесь некоторую дополнительную часть, чтобы гарантировать, что те, кто может создать, ограничены.

В общем, награда здесь потрясающая. В конце концов я могу создать несколько шаблонных проектов для дублирования для стартера, я могу настроить функциональность для каждого проекта менее чем за минуту. До этого потребовалось несколько кликов по двум приложениям, чтобы настроить вещи. API CODOSHIP позволяет мне также создавать конкретные конфигурации Pro/Basic для согласованности.

В дополнение к Codeship и Gitlab я также мог бы настроить приложения для регистрации ошибок и метрики приложений или что -либо еще, что мне обычно нужно в проекте. С помощью диалогового окна вы также можете добавить флажки, чтобы сделать их необязательными. Много потенциала здесь для некоторой отличной функциональности.

Как первый проект в мире Chatops, я чувствую себя действительно хорошо о том, как все произошло. Есть еще несколько еще нескольких предметов, которые я хочу добавить, и хотел бы услышать ваши предложения — не стесняйтесь добавлять проблему в репо https://gitlab.com/kellyjandrews/shipwright/issues .

Оригинал: «https://dev.to/kellyjandrews/using-slack-and-chatops-to-create-new-projects-4bag»