Повышение производительности за счет автоматизации повторяющихся задач

Вы знаете те утомительные задачи, которые вам приходится выполнять на работе: обновление файлов конфигурации, копирование и вставка файлов, обновление тикетов Jira.

Через некоторое время время прибавляется. Так было, когда я работал в компании, занимающейся онлайн-играми, в 2016 году. Работа могла быть очень полезной временами, когда мне приходилось создавать настраиваемые шаблоны для игр, но около 70% моего времени тратилось на создание их копий. шаблоны и развертывание обновленных реализаций.

Что такое рескин?

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

Но когда мы создадим его рескин, мы будем использовать разные ассеты, и игра все равно будет работать. Если вы посмотрите на такие игры, как Candy Crush или Angry Birds, вы обнаружите, что в них есть много разновидностей одной и той же игры. Обычно релизы на Хэллоуин, Рождество или Пасху. С точки зрения бизнеса это имеет смысл. А теперь… вернемся к нашей реализации. Каждая из наших игр будет использовать один и тот же связанный файл JavaScript и загружаться в файл JSON с разным содержимым и путями к ресурсам. Результат?

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

  1. Выполните git pull в репозитории шаблонов, чтобы убедиться, что они обновлены.
  2. Создать новую ветку - определяется идентификатором заявки Jira из основной ветки.
  3. Сделайте копию шаблона, который мне нужно было построить.
  4. Запустите gulp.
  5. Обновите содержимое в файле config.json. Это будет включать пути к ресурсам, заголовки и абзацы, а также запросы на обслуживание данных.
  6. Создавайте локально и проверяйте соответствие содержания текстовому документу заинтересованной стороны. Да, я знаю.
  7. Уточните у дизайнеров, что им нравится, как это выглядит.
  8. Слияние с основной веткой и переход к следующей.
  9. Обновите статус заявки Jira и оставьте комментарий для заинтересованных сторон.
  10. Промыть и повторить.

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

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

Недостаточно написать код для экономии времени. Я думал о лучшем подходе к нашему рабочему процессу, чтобы я мог больше использовать сценарии. Переместите содержимое из документов Word в тикеты Jira, разбив его на соответствующие настраиваемые поля. Разработчики, вместо того, чтобы отправлять ссылку на то, где ресурсы существуют на общедоступном диске, было бы более практично настроить репозиторий сети доставки контента (CDN) с промежуточным и производственным URL-адресами для ресурсов.

Jira API

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

Переход на узел Bash

Сценарии Bash были хороши, но если кто-то работал на машине с Windows, их нельзя было запустить. Покопавшись, я решил использовать JavaScript, чтобы обернуть весь процесс в специальный инструмент сборки. Я назвал инструмент Мейсон, и он все изменил.

CLI

Когда вы используете Git, я полагаю, вы делаете это в терминале, вы заметите, что у него очень удобный интерфейс командной строки. Если вы сделаете орфографическую ошибку или введете команду неправильно, он вежливо предложит, что, по его мнению, вы пытаетесь ввести. Библиотека под названием commander применяет такое же поведение, и это была одна из многих библиотек, которые я использовал.

Рассмотрим упрощенный пример кода ниже. Это загрузка приложения интерфейса командной строки (CLI).

src / mason.js

#! /usr/bin/env node
const mason = require('commander');
const { version } = require('./package.json');
const console = require('console');
// commands
const create = require('./commands/create');
const setup = require('./commands/setup');
mason
    .version(version);
mason
    .command('setup [env]')
    .description('run setup commands for all envs')
    .action(setup);
mason
    .command('create <ticketId>')
    .description('creates a new game')
    .action(create);
mason
    .command('*')
    .action(() => {
        mason.help();
    });
mason.parse(process.argv);
if (!mason.args.length) {
    mason.help();
}

Используя npm, вы можете запустить ссылку из своего package.json, и она создаст глобальный псевдоним.

...
"bin": {
  "mason": "src/mason.js"
},
...

Когда я запускаю ссылку npm в корне проекта.

npm link

Он предоставит мне команду, которую я могу вызвать, называется каменщиком. Поэтому всякий раз, когда я вызываю mason в своем терминале, он запускает этот сценарий mason.js. Все задачи подпадают под одну команду под названием mason, и я использовал ее для создания игр каждый день. Время, которое я сэкономил, было… невероятным.

Ниже вы можете увидеть гипотетический пример того, что я сделал тогда, когда я передаю номер заявки Jira команде в качестве аргумента. Это приведет к свертыванию Jira API и получению всей информации, необходимой для обновления игры. Затем он приступит к созданию и развертыванию проекта. Затем я отправлял комментарий и отмечал заинтересованного лица и дизайнера, чтобы они знали, что это было сделано.

$ mason create GS-234
... calling Jira API 
... OK! got values!
... creating a new branch from master called 'GS-234'
... updating templates repository
... copying from template 'pick-from-three'
... injecting values into config JSON
... building project
... deploying game
... Perfect! Here is the live link 
http://www.fake-studio.com/game/fire-water-earth
... Posted comment 'Hey [~ben.smith], this has been released. Does the design look okay? [~jamie.lane]' on Jira.

Все сделано несколькими нажатиями клавиш!

Я был так доволен всем проектом.

Идея, лежащая в основе концепции

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

Метод развития

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

Я понимаю, что обстоятельства и потоки в каждом бизнесе разные, но вы должны быть в состоянии найти что-то, даже небольшое, что может немного облегчить ваш рабочий день в офисе.

Тратьте больше времени на разработку и меньше на администрирование. Надеюсь, вам понравится, на следующих этапах я сделаю улучшения, а пока увидимся!