Всем привет) Это мой первый пост на Хабре, и сегодня я расскажу про небольшой pet project (git-trigger) , который я недавно написал для сборки своих проектов на сервере. На данный момент я использую его в нескольких своих проектах для автоматической сборки и пока не было замечено никаких ошибок.

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

Работает все это дело максимально просто. git-trigger запускает воркер, который с какой-то периодичностью пытается сделать git pull origin branchname и при обнаружении изменений в ветке он запускает сборку проекта через make команду.
Команда для запуска выглядит примерно так:

git_trigger tarmalonchik/project_name /root make_command branch_name

Для того чтобы установить этот сервис нужно использовать команду:

go install github.com/tarmalonchik/git_trigger@latest

Далее можно добавить сервис в systemd, вот так примерно выглядит мой конфиг для systemd:

[Unit]
Description=script which runs git trigger
Wants=network-online.target ssh-agent.service
After=network-online.target ssh-agent.service

[Service]
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin
Environment=HOME=/root
ExecStart=/root/go/bin/git_trigger tarmalonchik/project_name /root build master

[Install]
WantedBy=multi-user.target

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

Комментарии (15)


  1. TheMrWhite
    20.11.2022 19:15
    +11

    github actions?


    1. tarmalonchik Автор
      20.11.2022 19:16
      -3

      Можно использовать и их, только они платные)


      1. Rive
        20.11.2022 19:23
        +4

        Условно-бесплатные (есть бесплатный лимит серверных ресурсов на каждый месяц).


        1. aborouhin
          20.11.2022 19:25
          +2

          Причём он не сильно-то повышается платностью :) 2000 минут для бесплатных аккаунтов, 3000 для Pro. Публичные репозитории без ограничений в обоих случаях.


      1. fedorro
        20.11.2022 19:24
        +6

        33 часа (2000 минут) в месяц бесплатно. Сборка C# солюшена на 100 проектов занимает пару минут - можно хоть каждый час выкатываться. Если пет-проект не форк хромиума, то вполне хватает, обычно ????


        1. tarmalonchik Автор
          20.11.2022 19:27

          Спасибо за комментарий) Я просто знал что они платные и уже особо дальше не стал смотреть в эту сторону) В будущем буду брать в расчет GitHub Actions)


          1. naff
            20.11.2022 20:03
            +4

            Звучит как «я просто не стал разбираться и сделал свой велосипед»
            Если бы разобрались, может и статьи бы не было


            1. tarmalonchik Автор
              20.11.2022 20:46
              +1

              Я соглашусь с вами, что чаще приоритетнее использовать готовые решения, но иногда бывает желание написать что то свое, иногда это помогает узнавать что то новое, так что в велосипедах не вижу ничего плохого, благодаря ним появляется выбор и возможность использовать какие то альтернативы. Согласитесь что не очень круто когда для решения какого то вопроса есть только один возможный вариант.
              Поэтому лично я ничего не имею против велосипедов, вопрос в их качестве, а когда есть другие люди, которым твой велосипед может понравиться, то велосипед в теории может и перестать быть велосипедом благодаря большому количеству пулл реквестов )


          1. Voenniy
            20.11.2022 20:20
            +6

            А еще есть Gitlab CI и множество других сервисов (и у всех есть бесплатные тарифы)
            https://github.com/255kb/stack-on-a-budget/blob/master/pages/continuous-integration-delivery.md


    1. trawl
      21.11.2022 14:03
      +1

      А потом гитхаб накладывает санкции на вашу страну (или комнадзор вашей страны блокирует гитхаб, или блочит порнхаб по маске *hub или ещё что-нибудь такое), вы мигрируете на битбакет/гитлаб/другое и там всё это нужно переписывать (если оно вообще есть).


      1. sshemol
        21.11.2022 17:38

        +


      1. tarmalonchik Автор
        21.11.2022 17:55

        Как раз таки в кейсе с моим деплоем можно немного поправить код, и будет работать как с гитхабом гитлабом и битбакетом. Буквально пару строчек поправить, и будет работать с чем угодно. А если использовать GitHub Actions etc... то придется каждый раз при переезде с одного провайдера на другой править конфиги


      1. Ryav
        22.11.2022 16:44

        Вам не кажется, что это следствие, а не причина проблем?


  1. olku
    21.11.2022 00:19

    Оцените заодно и пайплайны gitlab.com - деплой по кнопке, параллельность, интеграция с terraform, k8s и прочее.


  1. grossws
    21.11.2022 03:15
    +1

    Сборка из-под рута это всегда прекрасно. Ну и зависеть от ssh-agent.service -- чуток удивительно, понятнее была бы зависимость от socket'а.