Записки молодого девопсера
153 subscribers
94 photos
7 files
623 links
Здесь выкладываются различные команды и решения проблем, с которыми приходится сталкиваться, а также интересные статьи и видео из мира IT.
Download Telegram
Немного интересностей из последнего кейса.
Есть набор автотестов, который потреблял определенное количество трафика во время прогона до 74 версии Google Chrome (то что именно до этой версии - выяснилось уже позднее), с 75 версии Google Chrome и выше количество трафика на том же наборе увеличилось в 4-8 раз. Все это прекрасно видно по графикам мониторинга.
Немного об инфраструктуре, где крутятся автотесты. Имеются несколько машин, где развернут продукт Aerokube Selenoid (Docker-контейнер, который отвечает за запуск и остановку браузеров для автотестов. Браузеры запускаются тоже в Docker), а также терминальный сервер, откуда запускаются автотесты.
Сначала была проверена конфигурация Selenoid - в ней не было изменений, потом конфигурация ОС - тоже самое, затем начали запускать браузеры разных версий и проверять с какими параметрами они запускались. Нашли отличающийся параметр --disable-web-resources (Disables the backend service for web resources).
Не помогло. Начали дампить трафик - увидели небольшое число TCP Retransmission (https://networkguru.ru/tcp-retransmission-wireshark-chto-eto/), но это плюс-минус нормальная ситуация в сети, при небольшом количестве подобных пакетов. Следующие шаги заключались в проверке флагов в chrome://flags, проверке issue для selenium, в общем, поиск ошибок в используемых компонентах. Ничего похожего так и не нашли. Затем решили дампить трафик по-умному, сняв дамп на одном автотесте с версией Google Chrome, где объём трафика нормальный, а затем на версии, где большой объём трафика, после этого попакетно сравнить дампы. И это сработало. При анализе было обнаружено, что на новой версии Google Chrome часто происходят POST-запросы вида:

POST /wd/hub/session/66f73310d3d71f244a90287d2e823b91b92e436757429a63823aff59b955c485/execute/sync HTTP/1.1
User-Agent: selenium/3.141.59 (java windows)
Content-Type: application/json; charset=utf-8
Content-Length: 48867
Host: 10.84.181.9:4444
Connection: Keep-Alive
Accept-Encoding: gzip
 
{
"script": здесь тело скрипта на сотни символов
}


Как выяснилось, URL /session/{session id}/execute/sync - это команда Execute Script в WebDriver (https://chromium.googlesource.com/chromium/src.git/+/master/docs/chromedriver_status.md), которая несколько сотен раз (это только в одном автотесте) отправляла JS-файлы на сайт, а в старой версии такого не было. Статус этой команды - «Почти доделано» (даже есть баг, который говорит о проблемах с производительностью и о том, что эта фича будет работать, даже если у вас нет необходимости в её использовании - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2938). И эта команда стала частью стандарта W3C (World Wide Web Consortium), поддержка которого как раз была реализована в Google Chrome 75. Как можно поправить всё быстро - отключить поддержку w3c в браузере (https://stackoverflow.com/questions/56452798/how-to-turn-off-w3c-in-chromedriver-to-address-the-error-unknown-command-cannot), медленно - внимательно изучить новый стандарт и провести корректировки в коде автотестов.
При обновлении Gitlab узнал, что существуют специальные сервисные учетные записи:

* Ghost User - служит для отображения комментариев и issues для удаленных пользователей (https://gitlab.com/gitlab-org/gitlab-foss/-/issues/33020)

* Gitlab Support Bot - создает issues (https://docs.gitlab.com/ee/user/project/service_desk.html#support-bot-user)

* Gitlab Migration Bot - не нашел никакой информации. Возможно, служит для проведения миграций в БД или иных сущностей

P.S. Подобные учетные записи не учитываются в подсчёте лицензий.
Для смены таймзоны внутри Docker-контейнера на базе Alpine нужно установить пакет tzdata командой apk add tzdata и установить переменную окружения TZ (например, TZ=Europe/Moscow)
В версии 2,221 Jenkins добавили полезный функционал для очистки старых билдов и артефактов. Опцию можно настроить глобально для всех проектов или для каждого проекта по отдельности. Можно указать сколько дней нужно хранить билды/артефакты и максимальное число билдов/артифактов.
https://support.cloudbees.com/hc/en-us/articles/215549798-Best-Strategy-for-Disk-Space-Management-Clean-Up-Old-Builds
Делаем свой сайт безопаснее.
Есть вот такой ресурс https://www.ssllabs.com, который проверяет безопасность вашего сайта (актуальность шифров, алгоритмов, протоколов и прочее).
После сканирования ресурс дает рейтинг вашему сайту в плане защиты. Ниже краткий пересказ того, как я получал рейтинг A+ вместо B на примере веб-сервера nginx.
* Отключаем поддержку старых версий протокола TLS (а именно, версий 1.0 и 1.1), оставляем 1.2 и 1.3 - устанавливается директивой ssl_protocols
ssl_protocols TLSv1.2 TLSv1.3;

* Оставляем набор актуальных шифров (отключаем недействительные, небезопасные, малоиспользуемые и уязвимые шифры) - устанавливается директивой ssl_ciphers
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !RC4 !EXP !PSK !SRP !CAMELLIA !SEED';

* Даем возможность веб-серверу выбирать шифр, а не браузеру - устанавливается директивой ssl_prefer_server_ciphers
ssl_prefer_server_ciphers on;

https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices