LINUX.ORG.RU
ФорумAdmin

Git и централизованное хранение скриптов

 ,


1

4

По работе у меня есть пара десятков серверов (большинство debian, немного древних centos), которые необходимо администрировать. Практически на всех есть скрипты (мои или наследние), которые иногда ломаются или надо новый функционал добавить или новые дописать, типичная текучка. Там где нет скриптов, есть конфиги которые тоже иногда правятся. Есть еще пара сайтов, но ими специально обученный программист занимается, я просто проверяю что они работают после его правок и иногда по мелочи что-то делаю.

Как происходит правка/разработка сейчас: ssh, vim, погнали!

И вот хочется весь этот бардак организовать и возглавить: поднять локальный git (gitea, gogs) там наделать репозиториев, закинуть код, добавить README для потомков. Вроде все просто, но как синхронизировать центральный git с серверами? Опакечивать? Настраивать CI/CD с копированием по scp? Клонировать/пулить ан серверах (а если скрипты рахмазамы по системе, например код в opt и sd юнит в etc)? А если код поменяли на сервере, как вернуть его обратно в git? incron+scp (ну или git commit/push)?

про ansible/puppet/chif вкурсе, но не хочу их, не те масштабы бардака, да и судя по отзывам они своего бардака еще больше внесут.

★★★

Я не понял в чем проблема?

Я давно уже использую git для хранения настроек и скриптов на своих серваках. Сделал репозиторий (в своем git), в нем ветки для каждого сервака. git торчит в локальную сеть (где серваки), если нужно, чтобы торчал в мир, то можно настроить сетевые фильтры так, чтобы принимал только от нужных ip… синхронизация идет обычным git pull

soomrack ★★★★
()

У меня уже давно все конфиги, скрипты и прочие базы данных KeePassXC лежат в собственном гите. Синкаются просто руками в нужный момент: зашел на устройство, синканул. Для синка тоже есть отдельный скрипт там же :)

Если надо чтоб при изменении в гите сразу прилетало куда-то новое, то да, надо настраивать пайплайны в CI/CD. В Gitea пока такого нет, кстати, но вроде они пилят аналог GitHub Actions.

Можно развернуть GitLab, там все в комплекте, но он тяжелый…

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)

как синхронизировать центральный git с серверами? <и далее>

ты описал процедуру наколхожевания системы «оркестрации». Возьми, задействуй. Или таки наколхозь… ssh+vim+сценарии на серверах-клиентах и погнале! Тоже варик. Или поднять свой LDAP сервер доступный для серваков и завернуть на него софт на них который может в LDAP.

позабавило «опакечивать»… тогда надо и репы для серверов поднять и делать на них apt update; apt install <пакет_конфигов>
ну тоже можна

mrjaggers
()
Ответ на: комментарий от soomrack

git pull в куда? просто в репу на каждом серваке а потом из неё руками раскладывать? Это больше всего ТСа и смущает. Можно и так. Можно автоматизировать раскладываение… Об этом он собсно и спрашивает.

mrjaggers
()
Ответ на: комментарий от mrjaggers

вемборды для того, что в git именуется remote. Т.е. сервер.

ну да. хочу централизованную web морду для git чтобы удобно diff и README смотреть. И с этим git все синхронизировать (ну или хотябы распространять изменения с него)

Kolins ★★★
() автор топика
Последнее исправление: Kolins (всего исправлений: 2)
Ответ на: комментарий от soomrack

синхронизация идет обычным git pull

а если скрипт состоит из нескольких файлов раскиданных по системе? например код в /opt, а systed-юнит, который его запускает в /etc. Или сайт, когда код в /var/www, а к нему идет конфиг nginx в /etc. Где в таком случае делать git, в корне?

Kolins ★★★
() автор топика
Ответ на: комментарий от Kolins

Где в таком случае делать git, в корне?

Нет, конечно.

В идеале, в гите у тебя должны быть только нужные скрипты. А дальше два варианта:

  1. После изменений в гите запускается автоматическая доставка их на удаленные машины. Тупо скрипт также, который по SSH обновляет нужные файлы где надо.
  2. На удаленной машине делается Pull (выкачиваются изменения из удаленной репы), дальше в из этого же каталога запускаешь аналог первого пункта.
Zhbert ★★★★★
()

Настраивать CI/CD

Делал так, на небольших масштабах - норм. И ещё простой скриптик в кроне использовал, который просто пулил репы других скриптов.

evgeny_aa ★★☆
()
Последнее исправление: evgeny_aa (всего исправлений: 1)
Ответ на: комментарий от Zhbert

В Gitea пока такого нет, кстати, но вроде они пилят аналог GitHub Actions.

С 19 версии (вроде) уже можно активировать в конфиге actions и использовать. https://docs.gitea.com/next/usage/actions/overview

evgeny_aa ★★☆
()
Последнее исправление: evgeny_aa (всего исправлений: 1)
Ответ на: комментарий от Kolins

Это самый верный путь. Можно даже все вот это записать в один скрипт: запускаешь, а он автоматом делат пулл, смотрит, есть ли изменения, и раскидывает куда надо.

Zhbert ★★★★★
()
Ответ на: комментарий от mrjaggers

Почему не это? План: написать скрипт который будет лежать в git рядом с основным кодом и раскидывать его по системе, настроить action что при обновлнии кода в определенной ветке запускать git pull на сервере и тот первый скрипт который раскидает корд (и сервисы заодно перезапустит, если надо). Звучит как решение.

Если есть другие предложения, то внимательно слушаю.

Kolins ★★★
() автор топика
Ответ на: комментарий от Kolins
Ответ на: комментарий от Kolins

настроить action что при обновлнии кода в определенной ветке запускать git pull на сервере

каким образом эта гитея или что-то ещё будет что-то запускать на чужом сервере? там агент этой гитеи что ли? который слушает команды по сети?

нутак блджад это и есть та самая оркестрация.

mrjaggers
()

ansible не внесет никакого бардака, поскольку не требует клиентов на хостах. напиши плейбуки на своей машине на все случаи жизни и используй по необходимости

flant ★★★
()
Последнее исправление: flant (всего исправлений: 1)
Ответ на: комментарий от mrjaggers

каким образом эта гитея или что-то ещё будет что-то запускать на чужом сервере? там агент этой гитеи что ли?

еще не копал как там actions работают, но если можно вызывать скрипты то через python+paramiko по ssh можно отправлять команды, никаких агентов не потребуется

Kolins ★★★
() автор топика
Ответ на: комментарий от flant

напиши плейбуки

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

ну и опять же, ansible должен работать в паре с git чтобы забирать изменения из определенной ветки, но не думаю что это проблема

Kolins ★★★
() автор топика

не хочу их, не те масштабы бардака
пара десятков серверов

Те, те. Не усугубляй. Заодно получишь структуру репы - группы там, хосты, вот это всё.

thesis ★★★★★
()
Ответ на: комментарий от mrjaggers

там агент этой гитеи что ли?

Нет

который слушает команды по сети?

Нет

каким образом эта гитея или что-то ещё будет что-то запускать на чужом сервере?

Так же, как это делают teamcity/gitlab cicd/github actions и т.д.

evgeny_aa ★★☆
()

Клонировать/пулить ан серверах

Да

Можно организовать репозиторий в виде:

server0_debian_scripts/
server1_debian_scripts/
server2_ubuntu_scripts/
etc

а если скрипты рахмазамы по системе, например код в opt и sd юнит в etc

Символические ссылки использовать можно

как вернуть его обратно в git? incron+scp (ну или git commit/push)

Разумеется push, git как раз и нужен, чтобы вручную не копировать ничего.

ро ansible/puppet/chif вкурсе, но не хочу их, не те масштабы бардака

Может стоит попробовать? Вдруг понравится?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Kolins

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

flant ★★★
()
Ответ на: комментарий от Kolins

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

Ansible простой как полено. Так что я б урезал осетра до пары часов—полудня на начальное чтение документации и вперёд.

ugoday ★★★★★
()
Ответ на: комментарий от Kolins

Апдейты – руками. git это для хранения, а не для управления системой.

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

soomrack ★★★★
()

Звучит как «хочу IaC, не хочу изучать инструменты, которыми это принято делать». Все правильно советуют, бери Ansible, освоишься с базовыми вещами за пару дней, дальше будет проще. Ну а хранить в гите, конечно же.

George
()