Email or username:

Password:

Forgot your password?
Andrey Esin

Пришло оповещение от Woodpecker CI, что закончились свободные воркеры и всё встаёт в очередь (О_О в условиях дома это крайне странная для меня ситуация, т.к. задач мало)

Пошёл разбираться, смотреть логи

Mysql нагружался на 200%, тачка пыхтела изо всех сил
Стоило погасить Woodpecker и gitea, как всё становилось ок

Woodpecker CI забирает настройки джобы из gitea и обновляет статус коммита (мол хорошо собрался или перекособочило)

В логах gitea оказалось очень много [W] [Slow SQL Query] и подобных сообщений:

2024/07/09 21:14:00 ...git/commit_status.go:283:GetLatestCommitStatus() [W] [Slow SQL Query] SELECT max(index) as index FROM commit_status WHERE (repo_id = ?) AND (sha = ?) GROUP BY context_hash ORDER BY max(index) desc [9 a3b69eb93eba84a405ea5d0812d7865418e5312c]

В commit_status оказалось почти 2 млн записей

Честно говоря не очень много

На всякий случай забэкапил табличку и удалил все, кроме самых свежих 10. Это помогло и все процессы зашевелились

1. Грусть печаль, что мои железки не вывозят подобное
2. Пока не совсем понимаю, зачем хранить всю историю сборок по каждому коммиту - то есть достаточно хранить условные 10, ведь хэш коммита не меняется, код не меняется. Ну ок, может быть в репе лежат подмодули и это необходимо, но я бы с удовольствием отключил, если бы знал как 😁
3. Я удалял втупую, то есть просто where id < , есть ощущение, что это надо сделать красиво, чтобы не потерять состояние коммитов


#gitea #WoodpeckerCI

9 comments
I'm Mary Poppins, y'all

@andrey а explain смотрел? может там индекса не хватает

Andrey Esin

Вот это грамотный вопрос
Explain я не догадался посмотреть

Записал

Спасибо

Andrey Esin
Сейчас проверил - выбирает индексы вполне логично
Iron Bug
зачем тебе CI дома? ты ведь даже разработкой не занимаешься и генту не собираешь, насколько я японимаю.
Andrey Esin

сейчас обидно стало

так-то я девопс-инженер, а разработка это для души

если отнестись к ci, ни как к сборке, а как к автоматизации процессов не затрагивающих привычные вещи для сборки и разработки, то получается весьма неплохо - эдакий распределённый cron на несколько агентов, с хранением скриптов в репе

Iron Bug
я 30+ лет разработкой занимаюсь. но когда ты пишешь код в одну каску, тебе не нужен CI, потому что ты сам ничего не сломаешь, а никто другой код испортить не может. CI нужен, когда есть сотни разработчиков по всему миру, например, и они херачать коммиты каждый день. типа вот как в кернеле. а на пет-проджекты на коленке-то это нафига?
Andrey Esin

@iron_bug
CI нужен для удобства. Ни всегда цель CI защита от ломания
Мне проще один раз настроить пайп, который будет собирать и деплоить мой код. Прозрачно (для меня). Через год, вернувшись для исправления условного косяка, мне не нужно будет вспоминать как залить и как разложить всё на сервере. Это помнит пайп

И повторюсь, в WoodpeckerCI, буквы CI это просто 2 буквы, т.к. они форкнули DroneCI и видимо решили так оставить. Он умеет как CI, так и CD. И умеет в cron, для запуска периодических задач, которые не связаны с разработкой. Ему можно повесить хоть запускать ansible скрипты для обновления тачек

@iron_bug
CI нужен для удобства. Ни всегда цель CI защита от ломания
Мне проще один раз настроить пайп, который будет собирать и деплоить мой код. Прозрачно (для меня). Через год, вернувшись для исправления условного косяка, мне не нужно будет вспоминать как залить и как разложить всё на сервере. Это помнит пайп

Iron Bug
я тебя огорчу: через год ты забудешь нафиг, что ты там вообще писал и проблема будет не в каком-то деплое, а в том, чтобы понять, какой идиот накорябал этот ужасный код :)
Iron Bug
к тому же, я не видела, чтобы люди, тем более не профессиональные разработчики, писали проекты с кодовой базой хотябы на пару мегебайт кода. а на более мелких нет смысла гонять CI.
Go Up