Есть проект и нам надо сделать следующие вещи:
- Сбилдить(собрать) проект.
- Статический анализ кода.
- Тесты(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-репозиторием, чтобы запустить тесты.
- Сколнировать репозиторий.
- npm i
- 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 - подключить к терминалу контейнера
- Есть билд-сервер, который собирает образы.
- Мы имея систему CI/CD жмек кнопку собрать образ.
- Образ собирается, вешает тэг и публикуется в registry.
- Нажимаем кнопку, которая говорит другому серверу(скачай образ с таким тэгом и запусти его) =======
- run: npm ci // install
- run: npm run build --if-present // build если надо
- run: npm test
Что я сделал?
- Создал ветку: git checkout -b new-feature
- git push --set-upstream origin new-feature
- Добавил код(любой)
- git add .
- git commit -m 'New commit'
- git push
- Пошел на github и создал pull request
Stashed changes Stashed changes
// Что нужно реализовать?
- Создать бота(botFather)
- Бот может слать конкретному человеку или в приватный чат. Создать чат и добавить туда бота.
- Нужно получить secrets: token(выдает botFather) и id пользователя или чата(через API).
- Добавить эти secrets в github
- Создать step
https://api.telegram.org/bot/getUpdates
// Token: 5897961554:AAHNK31px2AqgHCtSeggzv-Ni7OvnQUGZ1c // ChatId: -892666022