Czy mogę używać mojego istniejącego repozytorium Git z openshift?

102

Czy konieczne jest posiadanie repozytorium git tylko na openshift? Mam już repozytorium bitbucket / github git i wolałbym tylko tam naciskać. Czy mogę po prostu podłączyć się do niego, aby funkcja openshift stała się intymna?

Lub dla uproszczenia pcham tylko na github, ale kiedy chcę wdrożyć, robię coś z openshift?

Sprawdziłem to, ale zdezorientowało mnie: chodzi o scalanie exiting i nowego (openshift) gita?

Jigar Shah
źródło
6
Czy mógłbyś zweryfikować pytanie? Bardzo trudno to zrozumieć.
Matt Fenwick,

Odpowiedzi:

226

Mam wrażenie, że nie jesteś jeszcze wystarczająco przyzwyczajony do używania gita. Radziłbym zapoznać się z git, aby w pełni zrozumieć, jak wypchnąć kod do openshift. Niemniej jednak pozwólcie, że spróbuję wam wyjaśnić, jakie kroki trzeba wykonać: Tak jak w przypadku gita ogólnie, podejście do wyboru tutaj polega na sklonowaniu innego repozytorium git (np. Na bitbuckecie) na komputer lokalny:

git clone <bitbucket-repo-url>

Twój lokalny klon ma wtedy inne repozytorium (bitbucket itp.) Jako repozytorium zdalne. Twoje zdalne repozytorium jest przechowywane z aliasem „origin” (domyślny alias używany przez git podczas klonowania). Następnie dodajesz repozytorium openshift jako zdalne do swojego klona. Robisz to, używając aliasu dla zdalnego repozytorium, które dodajesz - używam „openshift” jako aliasu tutaj:

git remote add openshift -f <openshift-git-repo-url>

Aby móc następnie przesłać kod z lokalnego repozytorium git do openshift, najpierw musisz scalić repozytorium openshift z lokalnym klonem bitbucket. Robisz to, wydając lokalnie:

git merge openshift/master -s recursive -X ours

Za pomocą tego polecenia możesz powiedzieć gitowi, aby scalił gałąź główną w repozytorium git openshift z lokalnym repozytorium git. Mówisz mu, aby scalił, używając strategii scalania rekurencyjnego i aby wybrał twoją („naszą”) wersję, gdy wystąpią konflikty.

Po zakończeniu scalania możesz przesunąć repozytorium git na openshift. Robisz to, wykonując:

git push openshift HEAD

Mówisz gitowi, aby przekazał twój lokalny kod do gałęzi HEAD w zdalnym repozytorium o nazwie "openshift" (alias, w którym zapisaliśmy repozytorium git openshift, kilka akapitów dalej).

przy okazji. Napisałem blog narzędzi jboss, który kilka miesięcy temu demonstrował, jak używać klienta openshift-java: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Powyższe kroki zauważysz w ostatnim akapicie „Już prawie gotowe”.

adietisheim
źródło
30
Myślę, że to nadal nie daje odpowiedzi na pytanie. Chodzi o to, aby nie używać repozytorium git openshift jako zdalnego, ale zamiast tego używać repozytorium na github (lub bitbucket w tym przypadku) jako repozytorium git. Nacisk na repozytorium github używane do współpracy powinno również zapewnić, że zostanie to odzwierciedlone w openshift. Szukam też tego samego, ale nie znalazłem odpowiedzi. Spróbuję zaktualizować, jeśli dostanę rozwiązanie tego problemu
Manoj NV
9
Nie możesz nie używać repozytorium git openshift. Repozytorium git w OpenShift to sposób, w jaki przekazujesz OpenShift swój kod. Nie ma alternatywy, nie ma zamiast tego opcji „użyj github”. Jak próbowałem opisać powyżej, repozytorium git w OpenShift nie wyklucza korzystania z github. Jeśli używasz github / bitbucket / XX jako głównego repozytorium kontroli źródła - a większość użytkowników to zrobi - po prostu dodasz repozytorium git OpenShift jako zdalne do lokalnego github / bitbucket / XX-clone. Pchnięcie do OpenShift jest wtedy równoważne z deplyoingiem do OpenShift.
adietisheim,
1
Jeśli to rozumiem, jeśli pracuję z openshift, powinienem pracować z repozytorium programistycznym (na przykład github), a jeśli chcę go wdrożyć, po prostu wciśnij openshift HEAD, riht?
Ricardo
1
Warto zauważyć, że zarówno flaga -f, jak i część ssh adresu URL git są niezbędne
Simon H
1
@adietisheim z nowym git 2.9 będziesz musiał dodać, --allow-unrelated-historiesponieważ domyślne ustawienie git zostało zmienione, aby uniemożliwić scalanie niepowiązanych historii.
Alon Burg
23

Wiem, że pytanie ma 2 lata, a odpowiedź @ adietisheim została przyjęta. Osobiście nie lubię scalać repozytorium openshift z moim lokalnym klonem, ponieważ nie chcę mieszać repozytorium OpenShift z główną gałęzią mojego publicznego repozytorium.

Zakładając, że dodałeś pilota za pomocą git remote add openshift <openshift-git-repo-url>, oto co bym zrobił:

Utwórz nowy oddział lokalny openshiftna podstawie masteroddziału.

git checkout -b openshift

Możesz wprowadzić pewne zatwierdzenia w gałęzi, openshifttakie jak konfiguracje wdrażania aplikacji. Następnie wypchnij bieżącą gałąź do zdalnego wzorca pasującego do referencji w repozytorium OpenShift z flagą, -faby nadpisać wszystko w zdalnej mastergałęzi.

git push openshift master -f

Za każdym razem, gdy chcę wdrożyć moją aplikację w OpenShift, sprawdzałem lokalny openshiftoddział i masterscalałem z nim gałąź, a następnie wymuszałem wypychanie na OpenShift, jednak -fmoże nie być wymagane przy następnych wypychaniach:

git checkout openshift
git merge --no-ff master
git push openshift master -f
Sithu
źródło
6

Z folderu projektu, zrób

git remote add backup user@server:/path/to/git/test.git
git push backup master

Możesz przeczytać Pushing to two git remote origins z jednego repozytorium i Changing git remote origin .

Mohannd
źródło
git push backup masterjest wystarczające, nie musisz określać obu stron refspec.
1
Wskazówka do wciskania pilota zdalnego sterowania 2 git jest idealna. Możesz także wykonać polecenie: git push -u allto „all” do domyślnego pilota. Kiedy to zrobisz git push, następnie push do 2 repozytoriów!
Akram Ben Aissi
5

Zgadzam się z odpowiedzią @ adietisheim: musisz lepiej zrozumieć git przed wdrożeniem z openshift =)

Teraz, nawet jeśli rozumiesz git, niekoniecznie jest oczywiste, jak wdrożyć istniejące repozytorium, jeśli struktura katalogów nie pasuje do struktury katalogów wymaganej przez openshift i jeśli chcesz zachować starą strukturę katalogów.

W tym celu mam następujące wskazówki:

  • oddzielne opcje, które są zależne od tych, które nie znajdują się w różnych plikach. Na przykład oddzielam ustawienia mojej bazy danych od innych ustawień do różnych plików, takich jak:

    • settings_deploy / openshift

    • settings_deploy / localhost

    a następnie łącze symboliczne do testu hosta lokalnego jako coś takiego:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Inną opcją jest wykrycie hosta za pomocą zmiennych środowiskowych:

    if 'OPENSHIFT_APP_NAME' in os.environ:
        //openshift configurations
    else:
        //localhost
    

    Jest to trochę prostsze, ponieważ pozwala umieścić wszystkie konfiguracje w jednym pliku. Jest to trochę mniej ogólne, ponieważ jeśli kiedykolwiek inny z twoich hostów zaoferuje OPENSHIFT_APP_NAMEzmienną środowiskową (mało prawdopodobne dla tego), metoda się zepsuje. W każdym razie nadal musisz wyraźnie oddzielić, co jest zależne od wdrożenia, a co nie.

  • utwórz lokalny katalog wdrażania

  • sklonuj do niego początkowy szablon openshift

  • utwórz skrypt wdrażania, który:

    • łączy wszystko, od starego istniejącego lokalnego do ich prawidłowych lokalizacji w

      dowiązania twarde są szybkie w tworzeniu i wykorzystują bardzo mało pamięci

      możesz użyć czegoś takiego:

      cp -lrf original_repo_dir deploy_repo_dir

    • zachowaj tylko poprawny settings_deployplik w repozytorium wdrażania:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • siła pchająca:

      cd deploy_repo

      git push -f origin master

    • wyczyść repozytorium wdrożenia:

      git reset --hard HEAD

      git clean -df

dla zainteresowanych wdrożeniem django mam przykład na moim githubie , w szczególności sprawdź deploy.shskrypt i projekt, projects/elearnktóry wdraża.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
4

Powinieneś być w stanie przekazać istniejące repozytorium Git do potoku zasobów za pośrednictwem

rhc create-app $APPNAME ruby-1.9 --from-code $GIT_LOCATION

Zdalne repozytorium Git dostarcza następnie początkową aplikację dla OpenShift.

Drugą możliwością jest pominięcie tworzenia lokalnego repozytorium OpenSHift Git przez

rhc create-app $APPNAME ruby-1.9 --no-git

a następnie wykonaj kroki opisane powyżej, aby połączyć zdalne repozytorium Git OpenShift z lokalnym repozytorium Git.

stefankolb
źródło
4

Odpowiedź Mohannda jest doskonała, ale chciałbym podsumować całe rozwiązanie, na wypadek, gdyby ktoś tego potrzebował:

Aby użyć repozytorium github jako repozytorium Openshift, nie ma teraz idealnego rozwiązania, ponieważ Openshfit używa haków git do wyzwalania wdrażania lub ponownego wdrażania na podstawie twoich zatwierdzeń. Jednak najmądrzejszym sposobem byłoby użycie 2 repozytoriów (jednego z openshift i jednego z githuba), aby jednocześnie przekazać kod.

Aby to zrobić: Dodaj pilota o nazwie „all” i dodaj do niego 2 adresy URL typu push.

git remote add all ssh://[email protected]/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://[email protected]/~/git/yourapp.git
git remote set-url github-repo --push --add [email protected]:youruser/yourapp.git

Następnie ustaw pilota o nazwie „all” jako domyślnego pilota wypychanego:

git push -u all

Aby zatwierdzić i wypchnąć swój kod, postępuj jak zwykle: wypchnie 2 piloty i wdroży na OpenShift

git add .
git commit -m "my commit"
git push

I zobacz wynik:

[master 3fc96b2] my commit
 1 file changed, 2 deletions(-)
MyLaptop:myapp User$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To [email protected]:User/myapp.git
   a036a44..3fc96b2  master -> master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Stopping PHP 5.4 cartridge (Apache+mod_php)
remote: Waiting for stop to finish
remote: Waiting for stop to finish
remote: Building git ref 'master', commit 3fc96b2
remote: Preparing build for deployment
remote: Deployment id is 9037d37a
remote: Activating deployment
remote: Starting PHP 5.4 cartridge (Apache+mod_php)
remote: Application directory "/" selected as DocumentRoot
remote: -------------------------
remote: Git Post-Receive Result: success
remote: Activation status: success
remote: Deployment completed with status: success
To ssh://[email protected]/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

Mam nadzieję że to pomoże

Akram Ben Aissi
źródło
Masz błąd. Możesz mieć wiele repozytoriów, ale obu nie można nazwać „źródłem”. Muszą być wyjątkowe, takie jak: pochodzenie i źródło2
Eric P
używając tej implementacji, ale otrzymałem błąd, który mówi: Nie ma takiego zdalnego „openshift-git-repo”. Myślę, że brakuje w powyższym skrypcie ..
Arman Ortega
1

Napotkałem problemy podczas wdrażania istniejącego repozytorium kodu w Openshift. W moim konkretnym kontekście, w którym próbowałem wdrożyć aplikację internetową tomcat, kluczowe były pliki konfiguracyjne tomcat Openshift zawarte w folderze .openshift.

To, co mnie naprawiło, to włączenie folderu .openshift do mojego istniejącego drzewa źródłowego, a także włączenie profilu openshift do mojego pliku pom.xml maven.

Jest to najprawdopodobniej to samo, co mogłoby się zdarzyć, gdybyś scalił repozytorium z nową wersją OpenShift. Dla mnie to jest „dlaczego” kryjące się za następującym zdaniem w świetnej odpowiedzi Adietisheim:

„Aby następnie móc przesłać kod z lokalnego repozytorium git do openshift, musisz najpierw scalić repozytorium openshift z lokalnym klonem bitbucket”.

W moim przypadku to scalenie było potrzebne, aby pobrać pliki konfiguracyjne z katalogu .openshift. Zajęło mi to dużo czasu, ponieważ wypychanie bez katalogu .openshift nadal powodowało pomyślne kompilowanie i wdrażanie mojej aplikacji. Jedynym zachowaniem, które widziałem, był raport o brakujących plikach jsp, co sprawiło, że pomyślałem, że problem był związany z moją własną konfiguracją web.xml i serwletu.

Bram Luyten
źródło
0

Jeśli używasz Java, istnieje alternatywne podejście. Ale nawet w tym podejściu nadal używałbyś repozytorium git OpenShift. Repozytorium git dostarczone przez OpenShift to sposób, w jaki udostępniasz OpenShift swój kod, swoje wdrożenia:

Możesz - zamiast przesyłać swój kod do repozytorium git OpenShift - po prostu przekazać mu swój plik wojenny. Klonujesz repozytorium git OpenShift na komputer lokalny. Następnie tworzysz wojnę ze źródła aplikacji i umieszczasz tę wojnę w folderze wdrożeń w repozytorium git OpenShift (klon). Następnie dodajesz, zatwierdzasz i przesyłasz swój lokalny klon do OpenShift. Po pomyślnym wykonaniu push JBoss AS7 wybierze twoją wojnę i wdroży ją.

adietisheim
źródło
0

SPRÓBUJ SIĘ!

Krok 1: Utwórz aplikację. Twoją ulubioną metodą (z gitRepository, pre-maker Openshift itp.). jeśli używasz metody konsoli
krok 2: rhc git-clone nameApp
krok 3: rhc app-configure nameApp --auto-deploy
krok 4: ENJOY!

Patricio Joaquin Labarca Guzma
źródło
W porządku, ale to nie była odpowiedź na pytanie :)
Janos Vinceller