Skip to content

yaroslavchaadaev/nodejs-qa-ci-cd-06-2023

 
 

Repository files navigation

CI/CD

Есть проект и нам надо сделать следующие вещи:

  • Сбилдить(собрать) проект.
  • Статический анализ кода.
  • Тесты(unit тесты, e2e тесты).
  • Артефакты тестирования - отчеты(allure), анализ покрытия тестами(coverage).
  • Нотификации.
  • Публикация на github pages.

Список требований - это таска(task) или job. Каждый пункт - это шаги(steps). Все шаги объеденяются в единое целое - это pipeline.

Что-то, что мы запускаем по расписанию

С утра проснулись и у нас прошли все тесты и вечером. Исключить выходные дни. Каждый рабочий в 10 часов утра и в 17 часов вечера.

Cron

0 9,17 * * 1-5 // cron правилов минуты часы дни месяцы рабочие дни

  • Есть код и под него создал Dockerfile
  • Собрать образ(image) используя этот Dockerfile. docker build --tag=<название_образа:тэг> ./
  • Его запустить. docker run my-image-qa-otus/0.1.0
  • Его можно отправить в registry(docker hub) docker push nlapshin/my-image-qa-otus:0.1.0

Можно его использовать. docker pull nlapshin/my-image-qa-otus:0.1.0

А зачем нам всё это и что это(CI/CD)?

  • Непрерывная интеграция(ПО), непрерывная доставка(ПО).

Что нам надо делать:

  • Проверять код/продукт и т.д.
  • Для этого создаем различные проверки.

Мы можем проверять качество кода.

  • Наш код должен собираться и запускать.
  • Мы можем проверять его качество проверяя синтаксис. linter, AI инструменты, code review(но она ручная).
  • Тестировать наш код. QA Code review.

Кто какими инструментами для CI/CD пользовались?

Jenkins, Gitlab, Bitbucket(Pipeline), Github actions, Teamcity, CircleCI, Bamboo.

Что они нам помогают делать?

  • Записать последовательность действие. Pipeline.
  • Помогать нам собирать наше ПО. Build servers.
  • Плюшки или фишки.

Наше тех. задание.

Создать pipeline со следующими требования:

  • собирает проект и запускает наши тесты +
  • наш пайплайн запускается когда кто-то создает pull-request в ветку main. +
  • генерирует reports
  • генерирует coverage
  • Публикация на github pages
  • нотификацию в Telegram
  • выполнять программный код
  • Cron job с полным набором.

Cron Job. Что это? Задачи по расписанию.

0 0 0 0 0

Минута Час День Месяц Дни(недели)

https://github.com/nlapshin/nodejs-qa-docker

Github Actions, Gitlab, Bamboo, CircleCI, Jenkins, Teamcity.

  • А зачем нам все это? CI и CD, что это?

удобный релиз + доставка кода. автоматизация процессов. тесты сразу как запушили.

Не баш скрипты, а множество баш скриптов + знание людей.

Не надежно + траты человека часов.

CI/CD

цена + штат

Github Actions, Gitlab, Bamboo, CircleCI, Jenkins, Teamcity.

Github Actions и Jenkins - они бесплатные.

  • на что можно поделить?

Pipeline - запускать пайплайны(последовательность действий). Runner - это грубо говоря сервера, где запускаются наши пайплайны. Features - нотификации, интеграции, удобный интерфейс. Docker registry или npm registiry.

Наше тех. задание.

Создать pipeline со следующими требования:

  • собирает проект и запускает наши тесты
  • наш пайплайн запускается когда кто-то создает pull-request в ветку main.
  • генерирует reports +
  • генерирует coverage +
  • Публикация на github pages
  • нотификацию в Telegram
  • выполнять программный код
  • Cron job с полным набором.

Как мы запускаем наши пайплайны: Опишите последовательность действий которые нужно сделать с git-репозиторием, чтобы запустить тесты.

  1. Сколнировать репозиторий.
  2. npm i
  3. npm test
  • собирает проект и запускает наши тесты +
  • наш пайплайн запускается когда кто-то создает pull-request в ветку main. +

Пайплайн:

  • сама сборка проекта.
  • создание тестовых стендов.
  • запуск e2e-тестов: создать стенд + запустить тесты.

Как мы запускаем наши пайплайны:

  • вручную
  • по событию(pull-request, push и т.д.) - e2e тесты будет слишком долго.
  • по расписанию - раз в сутки перед или после рабочего дня

Сron

s m H M Y Weekday


"0 2 * * 1-5"

[16.x]

[14.x, 16.x, 18.x] - такой подход необходим для пакетов nodeJS

  • run: npm ci // install
  • run: npm run build --if-present // build если надо
  • run: npm test

docker build . --tag nlapshin/node-docker-qa - собирает образ и задаем ему имя nlapshin/node-docker-qa

Число 18

docker build ./path/to/directory Точка - это контекст(в разрезе файловой системы) запуска

docker ps - посмотреть список всех запущенных контейнеров. docker rm - это удалить контейнер docker run -it - запустить в интерактивном режим docker exec -it my-qa-container sh - подключить к терминалу контейнера

  1. Есть билд-сервер, который собирает образы.
  2. Мы имея систему CI/CD жмек кнопку собрать образ.
  3. Образ собирается, вешает тэг и публикуется в registry.
  4. Нажимаем кнопку, которая говорит другому серверу(скачай образ с таким тэгом и запусти его) =======
  • run: npm ci // install
  • run: npm run build --if-present // build если надо
  • run: npm test

Что я сделал?

  1. Создал ветку: git checkout -b new-feature
  2. git push --set-upstream origin new-feature
  3. Добавил код(любой)
  4. git add .
  5. git commit -m 'New commit'
  6. git push
  7. Пошел на github и создал pull request

Stashed changes Stashed changes

// Что нужно реализовать?

  1. Создать бота(botFather)
  2. Бот может слать конкретному человеку или в приватный чат. Создать чат и добавить туда бота.
  3. Нужно получить secrets: token(выдает botFather) и id пользователя или чата(через API).
  4. Добавить эти secrets в github
  5. Создать step

https://api.telegram.org/bot/getUpdates

// Token: 5897961554:AAHNK31px2AqgHCtSeggzv-Ni7OvnQUGZ1c // ChatId: -892666022

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 79.2%
  • Dockerfile 20.8%