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

Ще настроя някои инструменти/техники/среди, така че когато трябва да предоставя изходния код за разработчици на трети страни, да го правя без git история с някакъв чувствителен код, който вече е компилиран и премахнат. Затова искам да автоматизирам този процес, така че винаги да предоставям най-новата му версия, без болката да правя всички необходими стъпки на ръка всеки път. Използвам bitbucket и git.

Как мога да постигна целите си с bitbucket и git? Имам ли нужда от други инструменти?

P.S. Чувствайте се свободни да редактирате въпроса, ако той не изяснява идеята. Надявам се, че въпросите не са твърде общи и не попадат под ограничения


person rightaway717    schedule 19.06.2015    source източник
comment
Да, има близка причина специално за препоръки. Бих ви предложил да редактирате, за да попитате как вашите цели могат да бъдат постигнати с помощта на 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. BTW. няколко хиляди разработчици на ядрото на 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 webhook.

Ако изберете тази настройка, можете да използвате нашата услуга (https://bitrise.io/ - аз съм CTO ), тъй като има вградена поддръжка на Bitbucket webhook, дори и за безплатен акаунт, но разбира се можете да изберете всяка друга CI/CD услуга, тъй като тази настройка не изисква нищо повече от поддръжка на Bitbucket hook и възможността да стартирате вашия скрипт.

person Viktor Benei    schedule 19.06.2015