Posso usare il mio repository Git esistente con openshift?


102

È necessario avere git repo solo su openshift? Ho già bitbucket / github git repo e preferirei spingerlo solo lì. Posso semplicemente agganciarmi in modo che openshift riceva indicazioni?

O per semplificazione, spingo solo su github, ma quando voglio eseguire il deploy, faccio qualcosa con openshift?

Ho controllato questo ma mi ha confuso: si tratta di unire l'uscita e il nuovo git (openshift)?


6
Potresti correggere la domanda? È molto difficile da capire.
Matt Fenwick

Risposte:


226

Ho l'impressione che tu non sia ancora abituato a usare abbastanza git. Ti consiglio di entrare in git per capire appieno come inviare il tuo codice a openshift. Tuttavia, lascia che ti spieghi i passaggi coinvolti: come faresti con git in generale, l'approccio da scegliere qui è clonare l'altro tuo repository git (es. Su bitbucket) sulla tua macchina locale:

git clone <bitbucket-repo-url>

Il tuo clone locale ha quindi il tuo altro repository (bitbucket ecc.) Come repository remoto. Il tuo repository remoto è memorizzato con l'alias "origin" (l'alias predefinito usato da git se cloni). Quindi aggiungi il repository openshift come remoto al tuo clone. Lo fai mentre usi esplicitamente un alias per il repository remoto che aggiungi - Sto usando "openshift" come alias qui:

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

Per poter quindi inviare il codice dal tuo repository git locale a openshift, devi prima unire il tuo repository openshift con il tuo clone di bitbucket locale. Lo fai emettendo localmente:

git merge openshift/master -s recursive -X ours

Con questo comando dici a git di unire il ramo principale nel repository git openshift con il repository git locale. Gli dici di unire usando la strategia di fusione ricorsiva e di scegliere la tua versione ("nostra") quando ci sono conflitti.

Una volta eseguita l'unione, sei pronto per eseguire il push del tuo repository git su openshift. Lo fai facendo:

git push openshift HEAD

Dite a git di inviare il vostro codice locale al ramo HEAD del repository remoto chiamato "openshift" (l'alias in cui abbiamo memorizzato il repository git openshift, alcuni paragrafi più in alto).

btw. Alcuni mesi fa ho scritto un blog sugli strumenti jboss che dimostrava come utilizzare openshift-java-client: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Individuerai i passaggi precedenti nell'ultimo paragrafo "Ci siamo quasi".


30
Penso che questo ancora non risponda alla domanda. La domanda riguarda non utilizzare il repository git di openshift come telecomando, ma invece utilizzare il repository su github (o bitbucket per quella materia) come repository git. Un push al repository GitHub utilizzato per la collaborazione dovrebbe anche garantire che venga riflesso in openshift. Anch'io cerco la stessa cosa ma non ho trovato la risposta. Proverò ad aggiornare se trovo una soluzione per questo
Manoj NV

9
Non è possibile non utilizzare il repository git openshift. Il repository git all'interno di OpenShift è il modo in cui consegni a OpenShift il tuo codice. Non c'è alternativa, non c'è "usa github invece". Come ho cercato di delineare sopra, il repository git su OpenShift non ti esclude dall'utilizzo di github. Se usi github / bitbucket / XX come repository di controllo del codice sorgente principale - e la maggior parte degli utenti lo farà -, allora dovresti semplicemente aggiungere il repository git OpenShift come remoto al tuo github / bitbucket / XX-clone locale. Spingere a OpenShift equivale quindi a deplyoing a OpenShift.
adietisheim

1
Se lo capisco, se lavoro con openshift dovrei lavorare con un repository di sviluppo (ad esempio github) e se voglio distribuirlo basta premere su openshift HEAD, riht?
Ricardo

1
Vale la pena notare che il flag -f e la parte ssh dell'URL git sono entrambi essenziali
Simon H

1
@adietisheim con il nuovo git 2.9 dovrai aggiungere --allow-unrelated-historiespoiché l'impostazione predefinita di git è stata modificata per non consentire l'unione di storie non correlate.
Alon Burg

23

So che la domanda è di 2 anni e la risposta di @ adietisheim è stata accettata. Personalmente non mi piace unire il repository openshift nel mio clone locale perché non voglio mischiare il repository OpenShift nel ramo principale del mio repository pubblico.

Supponendo che tu abbia aggiunto il telecomando usando git remote add openshift <openshift-git-repo-url>, ecco cosa farei:

Crea un nuovo ramo locale openshiftbasato sul masterramo.

git checkout -b openshift

Potresti fare alcuni commit sul ramo openshiftcome le configurazioni di distribuzione dell'app. Quindi, spingere il ramo corrente al master di corrispondenza ref remoto nel repository OpenShift con il flag -fper sovrascrivere tutto nel masterramo remoto .

git push openshift master -f

Ogni volta che voglio distribuire la mia app su OpenShift, controllo il openshiftramo locale e unisco il masterramo con esso, quindi forza il push a OpenShift, tuttavia -fpotrebbe non essere necessario per i prossimi push:

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

6

Dalla cartella del tuo progetto, fai

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

Puoi leggere Pushing to two git remote origini da un repository e Modifica git remote origin .


git push backup masterè sufficiente, non è necessario specificare entrambi i lati di refspec.

1
La punta per spingere a 2 git remote è perfetta. Puoi anche quindi fare un: git push -u alla 'all' al telecomando predefinito. Quando lo fai git push, verrà successivamente inviato ai 2 repository!
Akram Ben Aissi

5

Sono d'accordo con la risposta di @ adietisheim: devi capire meglio git prima di distribuire con openshift =)

Ora, anche se comprendi git, non è necessariamente ovvio come distribuire il tuo repository esistente se la tua struttura di directory non corrisponde alla struttura di directory richiesta da openshift e se vuoi mantenere la tua vecchia struttura di directory.

Per questo, ho i seguenti suggerimenti:

  • opzioni separate che dipendono dalla distribuzione da quelle che non si trovano in file diversi. Ad esempio, separo le mie impostazioni del database da altre impostazioni in file diversi come:

    • settings_deploy / OpenShift

    • settings_deploy / localhost

    e poi collegamento simbolico al tuo test localhost come qualcosa del tipo:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Un'altra opzione è rilevare l'host utilizzando le variabili di ambiente:

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

    Questo è un po 'più semplice poiché ti permette di mettere tutte le configurazioni su un singolo file. È un po 'meno generale, dal momento che se un altro dei tuoi host offre una OPENSHIFT_APP_NAMEvariabile d'ambiente (improbabile per questa) il metodo si interrompe. Ad ogni modo, devi ancora separare chiaramente ciò che dipende dalla distribuzione e ciò che non lo è.

  • creare una directory di distribuzione locale

  • clona il modello openshift iniziale al suo interno

  • creare uno script di distribuzione che:

    • collega tutto dal tuo vecchio locale esistente alle posizioni corrette nel file

      i collegamenti fisici sono veloci da creare e utilizzano pochissima memoria

      potresti usare qualcosa come:

      cp -lrf original_repo_dir deploy_repo_dir

    • conserva solo il settings_deployfile corretto nel repository di distribuzione:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • forza di spinta:

      cd deploy_repo

      git push -f origin master

    • pulire il repository di distribuzione:

      git reset --hard HEAD

      git clean -df

per chi è interessato alla distribuzione di django, ho un esempio sul mio GitHub , in particolare controlla lo deploy.shscript e il progetto projects/elearnche distribuisce.


4

Dovresti essere in grado di passare un repository Git esistente nella pipeline degli asset tramite

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

Il repository Git remoto fornisce quindi l'applicazione iniziale per OpenShift.

Come seconda possibilità, puoi saltare la creazione del repository OpenSHift Git locale tramite

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

e quindi utilizzare i passaggi descritti sopra per unire il repository Git remoto di OpenShift nel repository Git locale.


4

La risposta di Mohannd è perfetta, ma vorrei riassumere la soluzione completa, nel caso qualcun altro ne avesse bisogno:

Per utilizzare il tuo repository GitHub come un repository Openshift, non esiste una soluzione perfetta ora, perché Openshfit utilizza git hook per attivare la distribuzione o la ridistribuzione in base ai tuoi commit. Tuttavia, il modo più intelligente sarebbe usare 2 repository (quello di openshift e quello del tuo gitHub) per inviare simultaneamente il codice a.

Per fare ciò: aggiungi un telecomando denominato "all" e aggiungi 2 URL push.

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

Quindi imposta il telecomando denominato "all" come telecomando push predefinito:

git push -u all

Per eseguire il commit e il push del codice, procedi come al solito: spingerà sui 2 telecomandi e si distribuirà su OpenShift

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

E guarda il risultato:

[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$

Spero che questo ti aiuti


Hai un errore. Puoi avere più archivi, ma entrambi non possono essere denominati "origine". Devono essere unici, come: origin e origin2
Eric P

utilizzando questa implementazione ma ho ricevuto un errore che dice No tale telecomando "openshift-git-repo" .. penso che manchi uno script sopra ..
Arman Ortega


1

Ho riscontrato problemi durante la distribuzione di un repository di codice preesistente su Openshift. Nel mio contesto particolare, in cui ho provato a distribuire una webapp Tomcat, i file di configurazione di Openshift Tomcat inclusi nella cartella .openshift erano cruciali.

Ciò che lo ha risolto per me è stata l'inclusione della cartella .openshift nel mio albero dei sorgenti esistente, nonché l'inclusione del profilo openshift nel mio file maven pom.xml.

Questo è molto probabilmente lo stesso che accadrebbe unendo il tuo repository con il nuovo a monte di openshift. Per me, questo è il "perché" dietro la seguente frase nella grande risposta di adietisheim:

"Per poter poi inviare il codice dal tuo repository git locale a openshift, devi prima unire il tuo repository openshift con il clone di bitbucket locale".

Nel mio caso, questa unione era necessaria per ottenere i file di configurazione dalla directory .openshift. Ci è voluto molto tempo per capirlo perché spingere senza la directory .openshift ha comunque permesso alla mia app di compilare e distribuire correttamente. L'unico comportamento che ho visto è stato un rapporto sui file jsp mancanti, il che mi ha fatto pensare che il problema fosse correlato alla mia configurazione web.xml e servlet.



0

Se stai usando java, c'è un approccio alternativo. Ma anche con questo approccio useresti comunque il repository git di OpenShift. Il repository git fornito da OpenShift è il modo in cui fornisci a OpenShift il tuo codice, i tuoi distribuibili:

Puoi, invece di inviare il tuo codice al repository git di OpenShift, semplicemente dargli il tuo file war. Cloni il repository git OpenShift sulla tua macchina locale. Quindi crei una guerra dalla fonte dell'applicazione e metti questa guerra nella cartella delle distribuzioni all'interno del tuo repository git OpenShift (clone). Quindi aggiungi, esegui il commit e invia il tuo clone locale a OpenShift. Una volta eseguito correttamente il push, JBoss AS7 sceglierà la tua guerra e la schiererà.


0

RILASSATI!

passaggio 1: crea l'app. Con il tuo metodo preferito (da gitRepository, pre-maker di Openshift, ecc.). se si utilizza il metodo console
passaggio 2: rhc git-clone nameApp
passaggio 3: rhc app-configure nameApp --auto-deploy
passaggio 4: DIVERTIMENTO!


Va bene, ma questa non era la risposta alla domanda :)
Janos Vinceller
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.