Рубрики
Uncategorized

5 инструментов для автоматизации вашего развития

Автоматизация вашего развития с помощью зависимого, автоматического назначения, слияние замораживания, хаски и запланировано … Помечено производительностью, Github, DevOps.

Автоматизация вашего развития с зависимым, автоматическим назначением, слиянием замораживания, хаски и запланированные напоминания.

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

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

1. Зависимый от

Автоматизированные обновления зависимости

Зависимость создает запросы на тягу, чтобы сохранить ваши зависимости и современные.

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

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

Сейчас он является частью GitHub, поэтому добавляя его еще проще, чем раньше. Вы можете Проверьте Как настроить зависимость, но в конце концов вы получите Зависимость .Мимл В вашем ..gitub папка. Наши выглядят так:

version: 2
updates:
  - package-ecosystem: "npm" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "daily"
    open-pull-requests-limit: 2
    commit-message:
       prefix: "BleedingEdge"

Единственное, что отличается от настроек по умолчанию, это то, что мы:

  • выбрал NPM как наш пакет-экосистем
  • Ограничено количество открытых PRS до 2
  • Добавлена префикс для сообщения Compart Compart Company Company (вы увидите позже, почему)

Четыре года назад у нас было 3 Frontend Reppos, теперь у нас есть около 14 активных. Вручную сохраняя каждую зависимость от до настоящего времени, было бы чрезвычайно трудоемким. Зацепляется многое, но он все еще требует времени для рассмотрения и объединения всех PR. Мы обычно занимаем день после нашего еженедельного освобождения, чтобы объединить запросы на тягу в зависимости.

Написание этого заставили меня интересно, если бы мы могли установить бот, чтобы открыть PR только на крупных, несовершеннолетних или патч версий и действительно функцию был запрошен в 2018 году И выпущены несколько месяцев назад, и теперь вы можете игнорировать обновления Semver по вашему выбору. Проверить Сообщение блога GitHub для большего.

2. Автоматическое назначение

Добавьте рецензенты/задание для вытягивания запросов при открытии запросов по тяги.

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

Вещи довольно очевидно, пусть бот сделает это.

Настройка легко, перейдите к probot.github.io/apps/autoAssign Нажмите кнопку Добавить в GitHub и никогда не беспокоитесь о добавлении вручную добавления рецензентов! Подобно зависимомусящему, вы окажетесь с auto_assing.yml файл:

# Set to true to add reviewers to pull requests
addReviewers: true

# Set to true to add assignees to pull requests
addAssignees: false

# A list of reviewers to be added to pull requests (GitHub user name)
reviewers:
  - teammember1
  - teammember2
  - teammember3
  - ...


# A number of reviewers added to the pull request
# Set 0 to add all the reviewers (default: 0)
numberOfReviewers: 0

# A list of keywords to be skipped the process that add reviewers if pull requests include it
skipKeywords:
  - BleedingEdge

У нас нет ничего необычного здесь. Мы используем SkipKeyWords вариант с Кровоточение ключевое слово Что если вы помните префиксы, зависимые префиксы для каждого из его запросов по тяги. Мы обрабатываем The Pull-запросы Зависит от того, что зависит немного по-другому и не хочет нагрузки всех рецензентов с ними.

После того, как запрос на тягах открыт, что бот пинает, и вы видите его в сроках, запрашивающих отзывы:

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

3. Слияние замораживания

Инструмент замораживания кода для блокировки слияния и развертывания

Причина добавления слияния Freeze возникла из простого вопроса:

Можете ли вы рассказать всем разработчикам, чтобы остановить объединение, так как мы начинаем регрессию?

Мы могли бы объявить об этом в канале нашей команды, надеясь, что все читают сообщение вовремя. Или мы могли бы интегрировать инструмент, который позволяет команде QA выпустить команду по провисанию, которая замерзает/безразрешится слияние в репозиторий. Слияние замораживания в помощь.

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

Для этого мы использовали Slack Apps и AWS LAMBDA Отказ

Мы создали пользовательское приложение Slack для нашего рабочего пространства, называемого развертыванием, у которых есть две команды SLASH: /freeze_all. и /unfreeze_all Отказ Обе команды имеют URL-адрес запроса на наш URL-адрес LAMBDA, и пропустите значение Freeze в качестве параметра запроса: ? Freeze = True | ложь Отказ

Использование его на слабине выглядит так:

Инструмент Freeze Merge обнаруживает конечную точку API для каждого добавления вашего репозитория, который вы можете использовать для замораживания или отключения. Это делает Lambda довольно простой, она просто делает запрос на каждый из конечных точек, предоставленных MergeFreeze.

const https = require('https');

exports.handler = async (event) => {

  const freezeValue = getFreezeValue(event);
  if (!freezeValue) {
    return {
      statusCode: 400,
      body: JSON.stringify('BOOM! You need to provide a freeze value as a query param, either true or false'),
    };
  }

  const userName = getUserName(event)

  const baseOptions = {
    hostname: 'mergefreeze.com',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': 0,
    },
  };

  const appOneOptions = {
    path: `/api/branches/your-organization/your-repo/main/?access_token=${process.env.ACCESS_TOKEN}&frozen=${freezeValue}&user_name=${userName}`,
    ...baseOptions,
  };
  ...
  /** Removed the rest of declaration to keep the preview short */


  await Promise.all([
    doRequest(appOneOptions),
    ...
    doRequest(appElevenOptions),
  ]);

  console.log("I'm done with all your promises!");

  // Text that gets return to Slack that is only visible to the person entering the command
  return {
    statusCode: 200,
    body: JSON.stringify('You have such power!!!'),
  };

  function doRequest(options) {
    return new Promise((resolve, reject) => {
      const req = https.request(options, (res) => {
        res.setEncoding('utf8');
        let responseBody = '';
        res.on('data', (chunk) => responseBody += chunk);
        res.on('end', () => resolve(responseBody));
      });

      req.on('error', (err) => reject(err));
      req.end();
    });
  }

  function getFreezeValue(event) {
    let freezeQueryString;
    let freeze;

    if (event && event.queryStringParameters && event.queryStringParameters.freeze) {
      freezeQueryString = event.queryStringParameters.freeze;
    }

    if (freezeQueryString === 'true' || freezeQueryString === 'false') {
        freeze = freezeQueryString;
    }

    return freeze;
  }

  function getUserName(event) {
    const bodyQueryParams = new URLSearchParams(event.body);
    return bodyQueryParams.get('user_name') || 'Web API';     
  }
};

После ввода команды MergeFreeze перечисляет все REPOS, которые получили замороженные или бенрозен, и вы получаете подтверждающее сообщение от Slack, делая свой рабочий день немного лучше!

После того, как регресса будет сделано, все подтолкнутся к производству и является тестируемым дымом, проводящий QA выдает unfreeze_all Команда и жизнь продолжаются.

4. Хаски

Современные родные Git крючки сделали легко

Мы используем Jira в качестве нашего инструмента управления работой, поэтому мы должны добавить удостоверение личности билета на наши имена ветвей и совершать сообщения, чтобы использовать как панель разработки при просмотре вопроса и VSCodes Heartens Gitlens:

Панель развития билетов JIRA:

Это означает, что каждый раз, когда вы создаете ветку, вы должны помнить, чтобы включить идентификатор выпуска JIRA, например: Task- ND-123 -Добавить аутентификацию. Только было не имело большого значения, так как быстро стало привычкой. Но какова была PIA подготовила его к каждому сообщению Commit. 1-й тур автоматизации только что создал Git Подготовка-коммиссия-сообщение Крюк на вашей местной машине, но поскольку команда становилась больше, нам нужно лучшее решение, которое оказывает хаски!

Хаски в сочетании с Jira-Prepare-Compad-Msg это то, что работало на нас:

...
  "private": true,
  "husky": {
    "hooks": {
      "prepare-commit-msg": "jira-prepare-commit-msg"
    }
  },
  "jira-prepare-commit-msg": {
    "messagePattern": "$J $M",
    "jiraTicketPattern": "(\\w+-\\w+-\\d+)"
  },
  "dependencies": {
...
  "devDependencies": {
    "husky": "^4.3.8",
    "jira-prepare-commit-msg": "^1.5.2",
...

Идентификатор билета JIRA взят из имени филиала Git. Теперь вы могли бы просто написать Commit -M "фиксируя опечатка" И вы получите сообщение об этом, похоже на Task-ND-123-фиксация опечатки Отказ

Если вы не назвали свой филиал правильно, например: отсутствуют ID билета JIRA, вы получите ошибку:

my-application git:(main) ✗ git commit -m "Add authentication methods"
husky > prepare-commit-msg (node v14.15.0)
JIRA prepare commit msg > start
JIRA prepare commit msg > Error: The JIRA ticket ID not found
JIRA prepare commit msg > done

Это пришло в красиво, так как все было настроено в package.json И новый разработчик сделает NPM i И она/он в значительной степени настроен, не нужно вручную настроить крючки.

Но идентификатор билета JIRA в послании Commit в комбинации с Gitlens — это то, что действительно сделало эту супер полезное.

Gitlens с Annotations вины Git:

Было много раз, когда мы должны были, по разным причинам, открываются и прочитали проблему JIRA, связанную с изменением кода. Наличие идентификатора билета на каждой мышке, щелкнув на протяжении всего кодовой базы, сохранил нам много времени. (Открытие его в браузере также легко, просто возьмите ID JIRA и добавьте его после …/Обзор/ + ND-123 E.G., https://your-organization.atlassian.net/browse/nd-123 Несомненно

Gitlens — это прохладный инструмент, который я лично использую ежедневно. Это поможет вам визуализировать авторство кода с первого взгляда через аннотации Git Blowe и объектив кода. Вы также можете очень легко перейти в историю, чтобы увидеть прошлые коммиты, которые также полезны.

5. Запланированные напоминания на запросы на потяну

Запланированные напоминания помогают команды сосредоточены на наиболее важных запросах обзора

Это то, что мы добавили не слишком давно, чуть немного после того, как мы переехали в архитектуру Micro Frestend. Одной из причин добавления этого было то, что количество репозиториев увеличилось с 4 до 14, поэтому выделенный канал для открытых запросов на тягу имел смысл. До этого мы бы опубликовали ссылку PR в основном канале нашей команды или надеемся, что люди увидят это по электронной почте. Таким образом, мы переместили шум в выделенный канал, и разработчики знают, что команда будет автоматически уведомлять.

Мы получаем уведомления в каждом рабочем дни каждый час с 8-16. Он игнорирует утвержденные запросы на потяну (в нашем случае, когда он одобрил его 2+ PPL), и мы также имеем игнорирующие термины для Кровоточение Таким образом, он игнорирует запросы на потяну, открытые зависимостями.

Настройка Запланированные напоминания Простое, и вы можете найти документы GitHub здесь Отказ Вот как это выглядит как раз, в нашем случае он публикует сообщения в частном этапе Frontend-Pull-запросы канал:

Существует много улучшений, что мы могли бы включить на то, что мы имеем, например, создание отделений непосредственно из Джиры ослабит, чтобы помнить соглашение об именах. Или, может быть, мы могли бы выбрать инструмент Freeze Merge, который встроен заморозки. Но обычно мы имели ограниченное время для расследования, или в то время было достаточно хорошо, а позже мы просто пытались улучшить процесс, а не заменять инструмент. Если у вас есть какие-либо предложения, пожалуйста, опубликуйте их в обсуждении ниже!

Не стесняйтесь подключаться 👋

Twitter |. Instagram. | Linkedin.

Оригинал: «https://dev.to/pgarzina/5-tools-to-automate-your-development-3m»