Как настроить автоматическую компиляцию используя git на linux сервере?
Есть проект на си, закрытый, немаленький, но нет удобного способа обновлять автоматически файлы на сервере и тестировать. Хотелось бы воспользоваться всей мощью git, но мои навыки работы с ним довольно примитивные, использую только для локального контроля, на сервере git не поднят, были попытки, но при компиляцию вечно создаются куча бинарей и рабочая директория вечно меняется. На офф странице вообще по этому поводу нет ничего годного, использование инструкции гита на сервере больше подходит для интерпретируемых языков, а как использовать для компилируемых проектов, увы, не осветили. Хотелось бы получить советы, как правильно воспользоваться данным инструментом в данном случае.
На офф странице вообще по этому поводу нет ничего годного, использование инструкции гита на сервере больше подходит для интерпретируемых языков, а как использовать для компилируемых проектов, увы, не осветили.
На какой официальной странице? "Использование инструкции гита" - это что значит?
Станислав Макаров, вы вырвали из контекста фразу, на худой случай читайте это как использование инструкции "Git на сервере", хотя даже без кавычек и так вроде понятно, так то что вы делаете с инструкцией - используете. А вообще есть такая глава(Гит на сервере). Может официальная страница это сильно сказано, но по крайней мере, на большинство запросов гугл в топ выводит этот учебник по гиту, но не в этом суть. А в том, что там не освещено то, что я задал в вопросе.
Денис Ковешников , да нет, таки ничего не понятно. Что такое инструкция гита?
"Инструкция по использованию гита а сервере" - это понятно. "Команды гита, выполненные на сервере" - лишено конкретики, но все равно, о чем идет речь - ясно.
Гит не умеет что-то там собирать или запускать. Тебе хочется воспользоваться услугами continuous integration (CI) и continuous delivery/deployment (CD). Но гит не относится к сервисам подобного класса, это просто система контроля версий.
Тебе лучше смотреть в сторону Hudson, Jenkins, Travis, AppVeyor. Это именно системы непрерывной интеграции и управления задачами.
По вопросу создания системы сборки проекта тебе помогут cmake, nmake, msbuild, phing, doit. Это системы автоматизации исполнения задач. phing и doit - так вообще очень мощные системы автоматизации.
Евгений Шатунов, если рассматривать гит, как систему контроля версиями, то да, вряд ли такая система должна уметь что то там собирать, но у гита есть возможность выполнять сценарии по некоторым событиям, которыми удобно воспользоваться для автоматизации некоторых действий, например как оповещения команды, что некто сделал изменения, в моем случае нужно автоматически распаковать пришедшие изменения в каталог, в котором происходит сборка и начать собственно ее. Хочу заметить, что проект закрытый и ни на каком гит хабе он хоститься не будет, так что как минимум Travis уже отвалился. Мне нужно что то простенькое, используя события гита.
но у гита есть возможность выполнять сценарии по некоторым событиям
Хуки нельзя использовать для непосредственного запуска длительных задач. CI/CD системы используют именно эти хуки, но для другого. Через хук в CI/CD систему поступает команда на планировку некоторого действия. Это очень быстрая операция, которая не приведет к проблемам в работе репозитория.
Ты подумай просто. У тебя есть репка с примерно 3 заливками в секунду, как ты будешь обрабатывать троттлинг своих задач сборки при такой нагрузке? Это еще не говоря о том, что твоя идея из за вялости своих процессов просто начнет вредить репозиторию. А CI/CD система распределит эту нагрузку в соответствии со сценарием задачи. В очередь поставит, отменит уже исполняющуюся, удалит повторы, раскидает на дочерние ноды...
Тот же Travis CI развертывается в приватном локальном пространстве.
Безусловно, ты можешь у себя делать то, что захочешь и как захочешь. Но я бы на твоем месте заинтересовался каждым из приведенных брендов и изучил бы возможности работы с ними.
гит не предназначен для этих целей.
это всего лишь хранение файлов, с контролем версий, контролируемым объединением, возможностью отката и т.п.
на базе гит делаются всяческие системы CD/CI, которые отдаленно напоминают то, что вы описали в своих хотелках.
это и ввело вас в заблуждение.
поскольку вопрос у вас не конкретный - дальше не могу подсказать куда копать. Возможно, вам хватило бы chroot, чтобы не зависеть от путей. Или вам нужно drone.io для настройки автоматической компиляции
Я читал о hooks, если вы понимаете о чем я, я представлял себе, что вовремя push на сервер, срабатывает hook и начинается компиляция. С другой стороны можно использовать голый репозиторий, в качестве хранилища и каталог, в который после push будет заливаться свежие файлы. а потом запускаться make. Так же можно попробовать в make файле организовать подкачку свежих изменений. Но дело в том, что это некоторые представления, а как это правильно на деле организовать, не совсем понятно и какой из вариантов выбрать.
Денис Ковешников, это все не свойства самого git.
ни гит-хуки ни запуск make.
git вообще довольно простая и узкоспециализированая штука.
там даже аутентификации нет - она прикручивается внешними по отношению к git вещами.
вы непонятно описали.
начали из глубины уже как-то понятой вами задачи.
хотелось бы сначала.
что именно нужно.
в частности - и причем здесь смены каталогов при make.
вам удалось написать make для локальной компиляции? безо всякого сервера и безо всякого git
awesomer, что значит гит хуки - это не свойство гит? верно, это не свойства, а методы самого гит, для возможности запуска нечто для собственных нужд, отличных от контроля версий.
вот этим я и хотел воспользоваться для автоматической сборки проекта, но здесь начинается затык, именно здесь, потому что я не представляю, как нужно организовать репозиторий(где то встречал метод, использования голого репозитория и отдельного каталога в который вываливаются изменения из голого при его изменении), хотел услышать тех, кто использует С в своем проекте и представляет, как при коммите с моей машины на сервер осуществить автоматическую сборку проекта или хотя бы наоборот, встроить вытягивание свежих изменений из репозитория при запуске make.
вот этим я и хотел воспользоваться для автоматической сборки проекта
вам нужно что-то вроде этого, документации хорошо расписаны различные интеграции docs.drone.io
на стоимость не смотрите - это когда на их площадке используешь.
когда ставишь себе - это бесплатно.