Как автоматизировать развертывание исходного и скомпилированного кода (исключая историю git) сторонним разработчикам?

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

Как я могу достичь своих целей с помощью bitbucket и git? Нужны ли мне другие инструменты?

P.S. Не стесняйтесь редактировать вопрос, если он не ясно излагает идею. Я надеюсь, что эти вопросы не слишком широки и не подпадают под ограничения


person rightaway717    schedule 19.06.2015    source источник
comment
Да, есть близкая причина именно для рекомендаций. Я предлагаю вам edit спросить, как ваши цели могут быть достигнуты с помощью bitbucket и git.   -  person    schedule 19.06.2015
comment
Google для непрерывной интеграции. Начните с Atlassian Stash, который совместим с Bitbucket.   -  person Nick Volynkin    schedule 19.06.2015


Ответы (3)


Похоже, вы хотите написать какой-нибудь post-commit хук. Но это может быть слишком тонко для вас. Просто напишите автоматические шаги в .git/hooks/post-commit и сделайте его исполняемым. Ты сможешь

git --work-tree PATH_FOR_THIRD_PARTY checkout HEAD -- PUBLIC_FILES

чтобы обновить PUBLIC_FILES для ваших сторонних разработчиков в PATH_FOR_THIRD_PARTY, где я предполагаю, что вы публикуете данные для сторонних разработчиков.

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

Если вы выбрали правильный макет для своего репозитория, вы можете просто использовать каталог PUBLIC_FILES, чтобы извлечь все PUBLIC_FILES в PATH_FOR_THIRD_PARTY/PUBLIC_FILES.

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

Кстати: если сторонний разработчик изменит PUBLIC_FILE в своем каталоге, вы можете просто

git --work-tree PATH_FOR_THIRD_PARTY add -u

Я часто использую этот метод для публикации файлов из репозитория git. Вы можете просто

git config -g alias.public '!git --work-tree $(git config --get public.root) '
git config public.root 'PATH_FOR_THIRD_PARTY'

так что вы можете сказать

git public diff --name-only

or

git public status -s -uno

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

Если вы используете этот метод, вам нужно проверить файлы в вашем локальном репозитории после того, как вы сделали публичную фиксацию:

git public add -u; git public commit -m "John Doe changed something"
git checkout HEAD -- .

Последняя строка обновляет локальное рабочее дерево, чтобы привести его в соответствие с фиксацией, которую вы сделали выше.

person ikrabbe    schedule 19.06.2015
comment
Звучит как отличная идея для моих маленьких нужд. Это целая история использования инструментов CI, и я еще не уверен, нужно ли мне это и нужно ли мне за это платить. Но это что-то интересное. Я уже использую хук перед фиксацией. Но я не думал об этом в этом контексте. - person rightaway717; 19.06.2015
comment
На самом деле я не думаю, что инструменты CI делают что-то большее, чем скрытие похожих шагов в крутом пользовательском интерфейсе. Я никогда не нуждался в них, так как я полностью доволен одним git. КСТАТИ. несколько тысяч разработчиков ядра linux использовали только git в течение нескольких лет, чтобы постоянно интегрировать свою работу в монстра, называемого ядром linux. - person ikrabbe; 07.07.2015

Я думаю, вам нужна функция git rebase с интерактивной опцией -i (git rebase -i). См. подробности по ссылке: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase

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

person Latheesan Sivarasathurai    schedule 19.06.2015
comment
Спасибо за твой ответ. Я знаю, как работает git и что такое папка .git. Но я хочу это автоматизировать. У меня есть отдельный проект для конфиденциальных данных. Я должен был упомянуть об этом в вопросе. - person rightaway717; 19.06.2015

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

  • напишите скрипт, который делает то, что вам нужно, чтобы предоставить архив исходного кода, скомпилированные двоичные файлы и другие ресурсы (если есть)
  • вы должны быть в состоянии выполнить этот скрипт на своей машине для легкого тестирования/изменения
  • затем напишите еще один скрипт, чтобы создать пакет из них так, как вы хотите (например, создать ZIP-файл) и распространить его на FTP-сервер, Amazon S3 или любой другой сервис, который вам нравится.
  • теперь у вас должно быть все, чтобы автоматизировать это для вас. Вы должны быть в состоянии сделать это на своей машине
  • если вы хотите автоматизировать весь процесс, чтобы он выполнялся каждый раз при изменении кода, то с этой настройкой вы можете выбрать практически любую службу непрерывной интеграции/доставки, чтобы запустить ее для вас, запускаемую веб-перехватчиком Bitbucket.

Если вы выберете эту настройку, вы можете использовать наш сервис (https://bitrise.io/ - я технический директор ), так как он имеет встроенную поддержку веб-перехватчика Bitbucket, даже для бесплатной учетной записи, но, конечно, вы можете выбрать любой другой сервис CI/CD, поскольку для этой настройки не требуется ничего, кроме поддержки перехватчика Bitbucket и возможности запускать ваш скрипт.

person Viktor Benei    schedule 19.06.2015