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

☁ Вот тут мы подходим к средам. Локально мы проверили только одно состояние приложения, а именно, что оно работает хорошо в нашей среде разработки. Но хорошо работающее приложение, это не только код, но и ОС, которые бывают разные, библиотеки, у которых разные версии, настройки безопасности систем и еще миллион причин, которые не дадут приложению развернуться на боевом сервере.

Все же допустим, что мы провели все это тестирование и на 100% уверены, что все работает как задумано. Но вот админы на сервере 5 минут назад накатили новый патч безопасности, и используемые в исполняемом файле библиотеки запрещены на продуктовом сервере. Ох, мы это не учли, придется приводить свою локальную систему к требованиям сервера, пересобирать приложение и заново все тестировать.

Что, если за день произойдет пять таких изменений на серверах? И что, если за этот день произойдет десять изменений в твоем коде? А если это крошечные изменения, например имя переменной или имя функции? Это может быть супер небольшое изменение, но сначала нужно будет узнать, не поменялась ли боевая среда, потом зайти и протестировать вручную, а потом отправить на развертывание. А теперь подумай, сколько твоих нервных клеток будет сожжено, если ты будешь работать в таком режиме. В оконцовке ты просто остановишься, поскольку ценность твоей работы сильно упадет.

💡Человек должен создавать код, а не заниматься рутиной, вроде запуска всех тестов вручную.

Ок, если бы у нас было настроено решение для CI в Jenkins, все это бы изменилось. Мы можем взять команду go test -v ., которой мы запускали наши тесты, и разместить ее внутри своего конвейера Jenkins CI. Туда мы можем положить не только простые юнит-тесты, но и интеграционные тесты, smoke тесты, и так далее. В общем все свои тесты.

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