Рубрики
Uncategorized

Создайте трубопровод CI/CD с Heroku CI.

Heroku CI автоматически запускает тестовый набор вашего приложения с каждым толчком к репозиторию GitHub вашего приложения, … Tagged с DevOps, CICD, GitHub, Herokuci.

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

Помимо сильного паритета Dev/Prod, использование Heroku CI поставляется со многими ключевыми преимуществами, которые включают в себя;

  • Параллельные тестовые прогоны.
  • Тесты браузера и тесты принятия пользователей
  • Бесплатная интеграция с трубопроводами Heroku
  • Легкая настройка тестовых зависимостей в тестовой среде
  • Простое интегрированное решение (интеграция, хостинг и развертывание)
  • Простой, предписывающий опыт разработчиков в современных решениях CI/CD
  • Управляющая поддержка
  • Многие поддерживаемые языки

В этой статье мы построим трубопровод CI/CD Heroku Flow, который использует Heroku CI.

Часть 1: Приложение Init.

Мы собираемся построить простое приложение Node.js, которое вычисляет факториал числа. Однако мы начнем с его API, а затем добавим факторную функциональность позже. Это так мы можем увидеть Heroku CI в действии. Чтобы начать, разветвляется репозиторий Здесь а затем клонируйте свой раздвоенный репозиторий на ваш компьютер.

$ git clone https://github.com/123MwanjeMike/cicd-with-herokuci.git

Затем переключитесь на созданный каталог и переключитесь на ветвь старта.

$ cd cicd-with-herokuci/
$ git checkout start

Инициализировать проект с npm init а затем установите Express

$ npm init -y
$ npm install express

У вас должен быть новый файл Package.json в вашем каталоге. Откройте его и добавьте сценарий начала Узел index.js Анкет

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "node index.js"
},

Теперь создайте простой API для приложения в index.js Файл с кодом ниже.

$ touch index.js
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.status(200).json({ message: 'Welcome to the Factorial calculator 🎊' });
});

app.get('*', (req, res) => {
  res.status(404).json({ message: 'Resource not found.' });
});

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}`));

Бег npm start должен дать аналогичный выход, как и ниже

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

Часть 2: трубопровод.

Мы будем добавлять наше заявление в трубопровод Heroku. Во -первых, нам нужно сказать Heroku, какие услуги запускать и как их запустить. Для этого мы добавим Procfile Файл в корне нашего каталога запуска;

$ echo "web: node index.js" >> Procfile

Сделайте и продвините свои изменения в удаленное хранилище.

$ git add .
$ git commit -m ""
$ git push origin start

Теперь двигаться здесь Если у вас есть учетная запись Heroku и создайте новый трубопровод Heroku. Не забудьте подключить ваш раздвоенный репозиторий, когда вы создаете трубопровод. Вы должны получить экран, как ниже. Нажмите Включить приложения для просмотра Развернуть предварительные просмотра для запросов на привлечение (PRS), прежде чем они будут объединены. Далее, под разделами в сфере трубопровода, нажмите Добавить приложение и создать новое приложение. Его обычная практика — развернуть приложение для развертывания из филиала Develop и производственного приложения из основного филиала. В этом случае мое факториальное приложение развертывается из моего филиала по умолчанию (Main). Нажмите настройки и прокрутите в раздел Heroku CI. Нажмите «Включить Heroku CI». Примечание: Heroku дает 1000 свободных часов Dyno в месяц своим проверенным пользователям, и их можно использовать для бесплатного доступа к сервису Heroku CI, пока они не будут истощены, и в этом случае вы начинаете платить за используемые дополнительные дино -протоколы. Наш трубопровод теперь настроен, и мы готовы к действию.

Часть 3: Служба факториалов приложения

Теперь мы собираемся добавить услугу в нашу приложение. Мы хотим, чтобы это рассчитало фактор числа. Это будет через запрос GET с параметрами пути. Мы будем использовать подход к разработке испытаний, находясь в нем, поэтому установим Test Runner Mocha и Chai библиотеки утверждений.

$ npm install -D mocha chai

Откройте Package.json файл и найдите тестовый ключ в сценариях и измените его значение, чтобы иметь Mocha *.test.js Верно

"scripts": {
  "test": "mocha *.test.js || true",
  "start": "node index.js"
},

Мы в основном говорим мокко выполнить .test.js Файлы без отображения ошибок при запуске NPM Тест . Позвольте нам теперь создать наш тестовый файл factorial.test.js У этого будут наши тесты, которые будут автоматизированы позже.

$ touch factorial.test.js
const { assert } = require('chai');
const factorial = require('./factorial');

describe('Factorial test', () => {
  it('Factorial(0) = 1', () => {
    assert.equal(factorial(0), 1);
  });

  it('Factorial(1) = 1', () => {
    assert.equal(factorial(1), 1);
  });

  it('Factorial(5) = 120', () => {
    assert.equal(factorial(5), 120);
  });

  it('Factorial(171) = Infinity', () => {
    assert.equal(factorial(171), Infinity);
  });
});

Далее, создайте файл factorial.js На что мы будем писать нашу функцию, которая вычисляет факториал числа.

$ touch factorial.js
const factorial = (number) => {
  let result = 1;
  if (number === 0 || number === 1) {
    return result;
  }
  for (let i = number; i >= 1; i -= 1) {
    result *= i;
  }
  return result;
};

module.exports = factorial;

Мы можем запустить наш тестовый набор с NPM Тест и получить вывод, как показано ниже Теперь давайте обновим наш index.js тоже с конечной точкой, которая может обслуживать запросы о факториалах чисел.

const express = require('express');
const factorial = require('./factorial');

const app = express();

app.get('/', (req, res) => {
  const { host } = req.headers;
  res.status(200).json({ message: 'Welcome to the Factorial calculator 🎊', docs: `http://${host}/docs` });
});

app.get('/docs', (req, res) => {
  const { host } = req.headers;
  res.status(200).json({
    message: 'Documentation',
    request: `http://${host}/factorial/`,
    response: 'The factorial of  is `',
    example: {
      request: `http://${host}/factorial/5`,
      response: 'The factorial of 5 is 120`',
    },
  });
});

app.get('/factorial/:number', (req, res) => {
  const { number } = req.params;
  if (isNaN(number)) return res.status(400).json({ message: `'${req.params.number}' is not a number.` });
  if (number > 200) return res.status(200).json({ message: `The factorial of ${number} is Infinity` });
  return res.status(200).json({ message: `The factorial of ${number} is ${factorial(number)}` });
});

app.get('*', (req, res) => {
  const { host } = req.headers;
  res.status(404).json({ message: 'Resource not found.', docs: `http://${host}/docs` });
});

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}`));

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

Часть 4: Магия

Момент истины наступил. Теперь мы снова перенесем наши изменения в GitHub, откроем запрос на притяжение, а затем наблюдаем, как все это работает.

$ git add .
$ git commit -m "Factorial service"
$ git push origin start

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

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

Вывод

Как вы видели, настройка конвейера CI/CD с Heroku CI довольно проста, а поток Heroku — очень интуитивно понятный рабочий процесс для визуализации процесса доставки кода. Heroku идеально подходит для малых и средних бизнес -приложений, даже если крупные бизнес -приложения с архитектурой микросервисов все еще могут использовать его. С Heroku CI вы можете двигаться быстро, не ломая вещи.

Для справки, вы можете найти весь код проекта в этом Репозиторий С началом филиалов, части-1, части-2 и части-3, которые имеют результирующую кодовую версию каждой соответствующей части выше и окончательный код приложения в основной ветви.

Этот пост был спонсирован Autoidle Анкет Autoidle-это дополнение, которое сокращает ваш счет за Heroku, автоматически ставив ваши приложения для постановки и просмотреть приложения, когда они вам не нужны.

Счастливого взлома.

Оригинал: «https://dev.to/mwanjemike/build-a-ci-cd-pipeline-with-heroku-ci-3de9»