Kann ich mein vorhandenes Git-Repo mit OpenShift verwenden?


102

Ist es notwendig, Git Repo nur bei OpenShift zu haben? Ich habe bereits Bitbucket / Github Git Repo und würde es vorziehen, nur dort zu pushen. Kann ich mich einfach einhaken, damit OpenShift eine Andeutung bekommt?

Oder zur Vereinfachung drücke ich nur auf Github, aber wenn ich bereitstellen möchte, mache ich etwas mit OpenShift?

Ich habe überprüfen dies aber es verwirrt mich: es spricht Fusion spannend und neu (Openshift) git?


6
Könnten Sie die Frage Korrektur lesen? Es ist sehr schwer zu verstehen.
Matt Fenwick

Antworten:


226

Ich habe den Eindruck, dass Sie noch nicht genug Git verwendet haben. Ich würde Ihnen raten, sich mit Git zu beschäftigen, um zu verstehen, wie Sie Ihren Code auf OpenShift verschieben können. Lassen Sie mich dennoch versuchen, Ihnen die Schritte zu erklären: Wie bei git im Allgemeinen besteht der hier zu wählende Ansatz darin, Ihr anderes Git-Repo (z. B. auf Bitbucket) auf Ihren lokalen Computer zu klonen:

git clone <bitbucket-repo-url>

Ihr lokaler Klon hat dann Ihr anderes Repo (Bitbucket usw.) als Remote-Repo. Ihr Remote-Repo wird mit dem Alias ​​"origin" gespeichert (dem Standard-Alias, der von git beim Klonen verwendet wird). Anschließend fügen Sie das OpenShift-Repo Ihrem Klon als Remote hinzu. Sie tun dies, während Sie explizit einen Alias ​​für das von Ihnen hinzugefügte Remote-Repo verwenden. Ich verwende hier "openshift" als Alias:

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

Um dann den Code von Ihrem lokalen Git-Repo zu OpenShift verschieben zu können, müssen Sie zuerst Ihr OpenShift-Repo mit Ihrem lokalen Bitbucket-Klon zusammenführen. Sie tun dies, indem Sie lokal Folgendes ausgeben:

git merge openshift/master -s recursive -X ours

Mit diesem Befehl weisen Sie git an, den Hauptzweig im OpenShift-Git-Repo mit Ihrem lokalen Git-Repo zusammenzuführen. Sie weisen es an, mithilfe der rekursiven Zusammenführungsstrategie zusammenzuführen und bei Konflikten Ihre ("unsere") Version auszuwählen.

Sobald die Zusammenführung ausgeführt ist, können Sie Ihr Git-Repo auf OpenShift stellen. Sie tun dies, indem Sie Folgendes tun:

git push openshift HEAD

Sie weisen git an, Ihren lokalen Code an den HEAD-Zweig auf dem Remote-Repo mit dem Namen "openshift" zu senden (der Alias, unter dem wir das OpenShift-Git-Repo gespeichert haben, einige Absätze weiter oben).

Übrigens. Ich habe vor einigen Monaten einen Blog mit jboss-Tools geschrieben, in dem gezeigt wurde, wie der openshift-java-client verwendet wird: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Sie werden die obigen Schritte im letzten Absatz "Wir sind fast da" erkennen.


30
Ich denke, das beantwortet die Frage immer noch nicht. Die Frage ist, nicht das Git-Repo von openshift als Fernbedienung zu verwenden, sondern das Repo auf Github (oder Bitbucket) als Git-Repo. Ein Push-to-Github-Repo für die Zusammenarbeit sollte auch sicherstellen, dass es sich in OpenShift widerspiegelt. Ich suche auch das gleiche, habe aber keine Antwort gefunden. Ich werde versuchen zu aktualisieren, wenn ich eine Lösung dafür bekomme
Manoj NV

9
Sie können das OpenShift Git Repo nicht verwenden. Mit dem Git-Repo in OpenShift übergeben Sie OpenShift Ihren Code. Es gibt keine Alternative, es gibt kein "Verwenden Sie stattdessen Github". Wie ich oben dargelegt habe, schließt das Git-Repo unter OpenShift Sie nicht von der Verwendung von Github aus. Wenn Sie github / bitbucket / XX als Master-Quellcodeverwaltungs-Repo verwenden - und die meisten Benutzer tun dies -, fügen Sie das OpenShift-Git-Repo einfach als Remote zu Ihrem lokalen Github / Bitbucket / XX-Klon hinzu. Das Pushing zu OpenShift entspricht dann dem Deplyoing zu OpenShift.
Adietisheim

1
Wenn ich es verstehe, wenn ich mit OpenShift arbeite, sollte ich mit einem Entwicklungs-Repo (zum Beispiel Github) arbeiten, und wenn ich es bereitstellen möchte, drücke einfach auf OpenShift HEAD, oder?
Ricardo

1
Es ist erwähnenswert, dass das Flag -f und der SSH-Teil der Git-URL beide wesentlich sind
Simon H

1
@adietisheim mit dem neuen Git 2.9 müssen Sie hinzufügen, --allow-unrelated-historiesda sich der Git-Standard geändert hat, um das Zusammenführen nicht verwandter Historien nicht zuzulassen.
Alon Burg

23

Ich weiß, dass die Frage 2 Jahre alt ist und die Antwort von @ adietisheim akzeptiert wurde. Ich persönlich möchte das OpenShift-Repo nicht in meinen lokalen Klon einbinden, da ich das OpenShift-Repo nicht in den Hauptzweig meines öffentlichen Repos mischen möchte.

Angenommen, Sie haben die Fernbedienung mit hinzugefügt git remote add openshift <openshift-git-repo-url>, würde ich Folgendes tun:

Erstellen Sie einen neuen lokalen Zweig openshiftbasierend auf dem masterZweig.

git checkout -b openshift

Sie können im Commit einige Commits vornehmen, openshiftz. B. Ihre App-Bereitstellungskonfigurationen. Verschieben Sie dann den aktuellen Zweig mit dem Flag an den Remote-Ref-Matching-Master im OpenShift-Repository -f, um alles im Remote- masterZweig zu überschreiben .

git push openshift master -f

Wann immer ich meine App für OpenShift bereitstellen möchte, überprüfe ich den lokalen openshiftZweig und masterfüge den Zweig mit ihm zusammen. Dann erzwinge ich einen Push an OpenShift, der jedoch -ffür die nächsten Pushs möglicherweise nicht erforderlich ist:

git checkout openshift
git merge --no-ff master
git push openshift master -f

6

Führen Sie in Ihrem Projektordner Folgendes aus

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

Sie können Pushing auf zwei Git-Remote-Ursprünge aus einem Repository und Ändern von Git-Remote-Ursprung lesen .


git push backup masterausreichend ist, müssen Sie nicht beide Seiten der Referenz angeben.

1
Der Tipp zum Drücken auf eine 2-Git-Fernbedienung ist perfekt. Sie können dann auch ein: git push -u allto 'all' für die Standardfernbedienung ausführen. Dabei git pushwird das anschließend auf die 2 Repos geschoben!
Akram Ben Aissi

5

Ich stimme der Antwort von @ adietisheim zu: Sie müssen git besser verstehen, bevor Sie mit openshift bereitstellen =)

Selbst wenn Sie git verstehen, ist es nicht unbedingt offensichtlich, wie Sie Ihr vorhandenes Repo bereitstellen, wenn Ihre Verzeichnisstruktur nicht mit der für openshift erforderlichen Verzeichnisstruktur übereinstimmt und Sie Ihre alte Verzeichnisstruktur beibehalten möchten.

Dafür habe ich folgende Tipps:

  • separate Optionen, die von der Bereitstellung abhängig sind, von denen, die sich nicht in verschiedenen Dateien befinden. Zum Beispiel trenne ich meine Datenbankeinstellungen von anderen Einstellungen in verschiedene Dateien wie folgt:

    • settings_deploy / openshift

    • settings_deploy / localhost

    und dann Symlink zu Ihrem Localhost-Test als etwas wie:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Eine weitere Option besteht darin, den Host mithilfe von Umgebungsvariablen zu erkennen:

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

    Dies ist etwas einfacher, da Sie alle Konfigurationen in einer einzigen Datei speichern können. Es ist etwas weniger allgemein, da OPENSHIFT_APP_NAMEdie Methode unterbrochen wird , wenn jemals ein anderer Ihrer Hosts eine Umgebungsvariable anbietet (für diese unwahrscheinlich). Wie auch immer, Sie müssen immer noch klar trennen, was von der Bereitstellung abhängt und was nicht.

  • Erstellen Sie ein lokales Bereitstellungsverzeichnis

  • Klonen Sie die anfängliche OpenShift-Vorlage hinein

  • Erstellen Sie ein Bereitstellungsskript, das:

    • verknüpft alles von Ihrem alten vorhandenen lokalen zu den richtigen Standorten an der

      Hardlinks lassen sich schnell erstellen und verwenden nur sehr wenig Speicher

      Sie könnten etwas wie verwenden:

      cp -lrf original_repo_dir deploy_repo_dir

    • Behalten Sie nur die richtige settings_deployDatei im Bereitstellungs-Repo:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • Kraftstoß:

      cd deploy_repo

      git push -f origin master

    • Bereinigen Sie das Bereitstellungs-Repo:

      git reset --hard HEAD

      git clean -df

Für diejenigen, die an einer Django-Bereitstellung interessiert sind, habe ich ein Beispiel auf meinem Github , insbesondere das deploy.shSkript und das Projekt, projects/elearndas es bereitstellt.


4

Sie sollten in der Lage sein, ein vorhandenes Git-Repository über in die Asset-Pipeline zu übergeben

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

Das entfernte Git-Repository liefert dann die erste Anwendung für OpenShift.

Als zweite Möglichkeit können Sie die Erstellung des lokalen OpenSHift Git-Repositorys über überspringen

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

Führen Sie dann die oben beschriebenen Schritte aus, um das OpenShift-Remote-Git-Repository mit Ihrem lokalen Git-Repository zusammenzuführen.


4

Mohannds Antwort ist perfekt, aber ich möchte die vollständige Lösung zusammenfassen, falls andere sie benötigen:

Um Ihr Github-Repo als Openshift-Repo zu verwenden, gibt es derzeit keine perfekte Lösung, da Openshfit Git-Hooks verwendet, um die Bereitstellung oder erneute Bereitstellung basierend auf Ihren Commits auszulösen. Am klügsten wäre es jedoch, zwei Repos (das OpenShift-Repos und das Github-Repos) zu verwenden, um den Code gleichzeitig an zu senden.

Gehen Sie dazu folgendermaßen vor: Fügen Sie eine Fernbedienung mit dem Namen "all" hinzu und fügen Sie 2 Push-URLs hinzu.

git remote add all ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url github-repo --push --add git@github.com:youruser/yourapp.git

Stellen Sie dann die Fernbedienung mit dem Namen "all" als Standard-Push-Fernbedienung ein:

git push -u all

Um Ihren Code festzuschreiben und zu pushen, gehen Sie wie gewohnt vor: Die 2 Fernbedienungen werden gepusht und unter OpenShift bereitgestellt

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

Und sehen Sie sich das Ergebnis an:

[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 git@github.com: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://23456789@myapp-namespace.rhcloud.com/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

Hoffe das hilft


Sie haben einen Fehler. Sie können mehrere Repositorys haben, aber beide können nicht als "Ursprung" bezeichnet werden. Sie müssen eindeutig sein, wie: Herkunft und Herkunft2
Eric P

Ich habe diese Implementierung verwendet, aber ich habe einen Fehler erhalten, der besagt, dass es kein solches entferntes 'openshift-git-repo' gibt. Ich denke, dass das obige Skript fehlt.
Arman Ortega


1

Ich hatte Probleme beim Bereitstellen eines bereits vorhandenen Code-Repositorys für Openshift. In meinem speziellen Kontext, in dem ich versucht habe, eine Tomcat-Webanwendung bereitzustellen, waren die im Ordner .openshift enthaltenen Openshift-Tomcat-Konfigurationsdateien von entscheidender Bedeutung.

Was es für mich behoben hat, war die Aufnahme des .openshift-Ordners in meinen vorhandenen Quellbaum sowie die Aufnahme des openshift-Profils in meine maven pom.xml-Datei.

Dies ist höchstwahrscheinlich dasselbe, was passieren würde, wenn Sie Ihr Repository mit dem neuen OpenShift-Upstream zusammenführen. Für mich ist dies das "Warum" hinter dem folgenden Satz in Adietisheims großartiger Antwort:

"Um dann den Code von Ihrem lokalen Git-Repo zu OpenShift verschieben zu können, müssen Sie zuerst Ihr OpenShift-Repo mit Ihrem lokalen Bitbucket-Klon zusammenführen."

In meinem Fall war diese Zusammenführung erforderlich, um die Konfigurationsdateien aus dem Verzeichnis .openshift abzurufen. Es hat lange gedauert, bis ich es herausgefunden habe, da das Drücken ohne das Verzeichnis .openshift meine App immer noch erfolgreich erstellt und bereitgestellt hat. Das einzige Verhalten, das ich sah, war ein Bericht über fehlende JSP-Dateien, der mich glauben ließ, dass das Problem mit meiner eigenen web.xml- und Servlet-Konfiguration zusammenhängt.



0

Wenn Sie Java verwenden, gibt es einen alternativen Ansatz. Aber auch bei diesem Ansatz würden Sie das OpenShift-Git-Repository verwenden. Mit dem von OpenShift bereitgestellten Git-Repository geben Sie OpenShift Ihren Code und Ihre bereitstellbaren Dateien:

Sie können - anstatt Ihren Code in das OpenShift-Git-Repo zu übertragen - einfach Ihre War-Datei angeben. Sie klonen das OpenShift-Git-Repo auf Ihren lokalen Computer. Anschließend erstellen Sie einen Krieg aus Ihrer Anwendungsquelle und legen diesen Krieg im Bereitstellungsordner Ihres OpenShift-Git-Repos (Klons) ab. Anschließend fügen Sie Ihren lokalen Klon zu OpenShift hinzu, schreiben ihn fest und übertragen ihn. Sobald der Push erfolgreich ausgeführt wurde, wählt der JBoss AS7 Ihren Krieg aus und setzt ihn ein.


0

EINFACH NEHMEN!

Schritt 1: App erstellen. Mit Ihrer Lieblingsmethode (von gitRepository, Pre-Maker Openshift usw.). Wenn Sie die Konsolenmetod-Methode verwenden
Schritt 2: rhc git-clone nameApp
Schritt 3: rhc app-configure nameApp --auto-deploy
Schritt 4: GENIESSEN!


Das ist in Ordnung, aber das war einfach nicht die Antwort auf die Frage :)
Janos Vinceller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.