Openshift ile mevcut git depomu kullanabilir miyim?


102

Sadece openshift'te git repo'ya sahip olmak gerekli midir? Zaten bitbucket / github git repo'm var ve yalnızca oraya basmayı tercih ederim. Openshift'in intimasyon alması için basitçe bağlanabilir miyim?

Ya da basitleştirme için, sadece github'a basıyorum, ancak dağıtmak istediğimde openshift ile bir şeyler yapıyorum?

Ben kontrol etti bu ama beni karıştı: o çıkmadan ve yeni (openshift) git birleştirilmesi bahsediyor?


6
Soruyu düzeltebilir misin? Anlaması çok zor.
Matt Fenwick

Yanıtlar:


226

Henüz git'i kullanmaya alışkın olmadığın izlenimine sahibim. Kodunuzu openshift'e nasıl iteceğinizi tam olarak anlamak için git'e girmenizi tavsiye ederim. Yine de size ilgili adımları açıklamama izin verin: Git ile genel olarak yapacağınız gibi, burada seçeceğiniz yaklaşım, diğer git deponuzu (örn. Bitbucket üzerinde) yerel makinenize klonlamaktır:

git clone <bitbucket-repo-url>

Yerel klonunuz daha sonra diğer deponuzu (bitbucket vb.) Uzak depo olarak alır. Uzak deponuz "origin" takma adıyla (klonlarsanız git tarafından kullanılan varsayılan takma ad) saklanır. Daha sonra openshift deposunu klonunuza uzak olarak eklersiniz. Bunu, eklediğiniz uzak depo için açıkça bir takma ad kullanırken yaparsınız - burada takma ad olarak "openshift" kullanıyorum:

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

Daha sonra kodu yerel git deponuzdan openshift'e itebilmek için, önce openshift deponuzu yerel bitbucket klonunuzla birleştirmeniz gerekir. Bunu yerel olarak yayınlayarak yaparsınız:

git merge openshift/master -s recursive -X ours

Bu komutla git'e openshift git deposundaki ana dalı yerel git deponuzla birleştirmesini söylersiniz. Yinelemeli birleştirme stratejisini kullanarak birleştirmesini ve çatışma olduğunda ("bizim") sürümünüzü seçmesini söylüyorsunuz.

Birleştirme işlemi tamamlandıktan sonra git deponuzu openshift'e itmeye hazırsınız. Bunu yaparak yaparsınız:

git push openshift HEAD

Git'e yerel kodunuzu "openshift" adlı uzak depodaki HEAD şubesine göndermesini söylüyorsunuz (openshift git deposunu sakladığımız takma ad, bazı paragraflar daha yukarı).

btw. Openshift-java-istemcisinin nasıl kullanılacağını birkaç ay önce gösteren bir jboss araçları blogu yazdım: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Yukarıdaki adımları son paragrafta "Neredeyse geldik" bölümünde göreceksiniz.


30
Sanırım bu hala soruyu cevaplamıyor. Soru, openshift'in git deposunu uzaktan kumanda olarak kullanmakla değil, bunun yerine git deposu olarak github'daki depoyu (veya bu konuda bitbucket'ı) kullanmakla ilgili. İşbirliği için kullanılan github deposuna bir itme, openshift'e yansıtılmasını da sağlamalıdır. Ben de aynısını arıyorum ama cevabını bulamadım. Bunun için bir çözüm
bulursam

9
Openshift git deposunu kullanamazsınız. OpenShift içindeki git deposu, OpenShift'e kodunuzu nasıl teslim ettiğinizdir. Alternatif yok, "onun yerine github kullan" yok. Yukarıda özetlemeye çalıştığım gibi, OpenShift'teki git deposu sizi github kullanmaktan alıkoymuyor. Ana kaynak kontrol deponuz olarak github / bitbucket / XX kullanırsanız - ve çoğu kullanıcı bunu yapar -, o zaman OpenShift git deposunu yerel github / bitbucket / XX-clone'unuza uzaktan eklemeniz yeterlidir. OpenShift'e itmek, OpenShift'e deplyoing ile eşdeğerdir.
adietisheim

1
Anlarsam, openshift ile çalışırsam, bir geliştirme deposu (örneğin github) ile çalışmalıyım ve onu dağıtmak istersem sadece openshift HEAD'e basın, sağ mı?
Ricardo

1
-F bayrağının ve git URL'sinin ssh kısmının her ikisinin de gerekli olduğunu belirtmek gerekir
Simon H

1
@adietisheim yeni git 2.9 ile --allow-unrelated-historiesilgisiz geçmişlerin birleştirilmesine izin vermemek için git varsayılanı değiştiğinden eklemeniz gerekecek .
Alon Burg

23

Sorunun 2 yaşında olduğunu ve @ adietisheim'ın cevabının kabul edildiğini biliyorum . Kişisel olarak openshift repo'yu yerel klonumla birleştirmeyi sevmiyorum çünkü OpenShift repo'sunu genel repomun ana şubesine karıştırmak istemiyorum.

Uzaktan kumandayı kullanarak eklediğinizi varsayarsak git remote add openshift <openshift-git-repo-url>, işte yapacağım şey:

Şubeye openshiftgöre yeni bir yerel şube oluşturun master.

git checkout -b openshift

Dalda, openshiftuygulama dağıtım yapılandırmalarınız gibi bazı taahhütler yapabilirsiniz . Ardından, -fuzak masterdaldaki her şeyin üzerine yazmak için geçerli dalı OpenShift deposundaki uzak ref eşleştirme yöneticisine gönderin .

git push openshift master -f

Uygulamamı OpenShift'e dağıtmak istediğimde, yerel openshiftşubeyi kontrol eder ve masterşubeyi onunla birleştirir , ardından OpenShift'e zorlamayı zorlarım, ancak -fsonraki itmeler için gerekli olmayabilir:

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

6

Proje klasörünüzden yapın

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

Bir depodan iki git uzak kaynağına gönderme ve git uzak kaynağını değiştirme bölümlerini okuyabilirsiniz .


git push backup masteryeterlidir, refspec'in her iki tarafını da belirtmenize gerek yoktur.

1
2 git uzaktan kumandaya itmek için ipucu mükemmel. Ayrıca git push -u allvarsayılan uzaktan kumandaya 'tümü' için bir: yapabilirsiniz . Yaparken git push, daha sonra 2 depoya itilecektir!
Akram Ben Aissi

5

@ Adietisheim'ın cevabına katılıyorum: openshift ile dağıtım yapmadan önce git'i daha iyi anlamanız gerekir =)

Şimdi, git'i anlasanız bile, dizin yapınız openshift'in gerektirdiği dizin yapısıyla eşleşmiyorsa ve eski dizin yapınızı korumak istiyorsanız, mevcut deponuzu nasıl dağıtacağınız çok açık değildir.

Bunun için aşağıdaki ipuçlarına sahibim:

  • farklı dosyalarda bulunmayanlardan dağıtıma bağlı olan ayrı seçenekler. Örneğin, veritabanı ayarlarımı diğer ayarlardan farklı dosyalara şu şekilde ayırıyorum:

    • settings_deploy / openshift

    • settings_deploy / localhost

    ve sonra aşağıdaki gibi localhost testinize sembolik bağlantı yapın:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Diğer bir seçenek, ortam değişkenlerini kullanarak ana bilgisayarı algılamaktır:

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

    Bu, tüm yapılandırmaları tek bir dosyaya koymanıza izin verdiği için biraz daha basittir. Bu biraz daha az geneldir, çünkü ana bilgisayarlarınızdan biri bir OPENSHIFT_APP_NAMEortam değişkeni sunarsa (bunun için olası değildir) yöntem bozulur. Her neyse, neyin yayılmaya bağlı olduğunu ve neyin olmadığını açıkça ayırmanız gerekir.

  • yerel bir dağıtım dizini oluşturun

  • ilk openshift şablonunu içine kopyalayın

  • şunları sağlayan bir dağıtım komut dosyası oluşturun:

    • eski yerel konumunuzdan doğru konumlarına kadar her şeyi sabit

      sabit bağlantıların oluşturulması hızlıdır ve çok az bellek kullanır

      şunun gibi bir şey kullanabilirsiniz:

      cp -lrf original_repo_dir deploy_repo_dir

    • settings_deploydağıtım deposunda yalnızca doğru dosyayı saklayın :

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • zorla itme:

      cd deploy_repo

      git push -f origin master

    • dağıtım deposunu temizleyin:

      git reset --hard HEAD

      git clean -df

Django dağıtım ilgilenenler için, ben bir örnek var benim github özellikle dışarı kontrol altında, deploy.shsenaryo ve proje projects/elearno dağıtır.


4

Var olan bir Git deposunu varlık ardışık düzenine şu yolla geçirebilmelisiniz:

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

Uzak Git deposu daha sonra OpenShift için ilk uygulamayı sunar.

İkinci bir olasılık olarak, yerel OpenSHift Git deposunun oluşturulmasını şu yolla atlayabilirsiniz:

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

ve daha sonra OpenShift uzak Git deposunu yerel Git deponuzla birleştirmek için yukarıda açıklanan adımları kullanın.


4

Mohannd'ın cevabı mükemmel, ancak başka birinin ihtiyaç duyması durumunda tam çözümü özetlemek istiyorum:

Github deponuzu bir Openshift deposu olarak kullanmak için, artık mükemmel bir çözüm yok, çünkü Openshfit, taahhütlerinize göre dağıtımı veya yeniden dağıtımı tetiklemek için git kancalarını kullanıyor. Bununla birlikte, en akıllıca yol 2 repo kullanmaktır (openshift'inki ve github'ınızınki) aynı anda kodu itmek için.

Bunu yapmak için: "tümü" adlı bir uzaktan kumanda ekleyin ve ona 2 itme url'si ekleyin.

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

Ardından, "tümü" adlı uzaktan kumandayı varsayılan uzaktan kumanda olarak ayarlayın:

git push -u all

Kodunuzu işlemek ve zorlamak için her zamanki gibi devam edin: 2 uzaktan kumandayı çalıştıracak ve OpenShift'te konuşlandırılacaktır.

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

Ve sonucu izleyin:

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

Bu yardımcı olur umarım


Bir hatanız var. Birden fazla deponuz olabilir, ancak her ikisi de "kaynak" olarak adlandırılamaz. Şunlar gibi benzersiz olmalılar: kökeni ve kökeni2
Eric P

bu uygulamayı kullanarak ama böyle bir uzaktan 'openshift-git-repo' yok diyen bir hata aldım .. Sanırım yukarıdaki komut dosyasında bir eksik var ..
Arman Ortega


1

Openshift'e önceden var olan bir kod havuzunu yerleştirirken sorunlarla karşılaştım. Tomcat web uygulamasını dağıtmaya çalıştığım bağlamda, .openshift klasöründe bulunan Openshift tomcat yapılandırma dosyaları çok önemliydi.

Benim için düzelten şey, .openshift klasörünün mevcut kaynak ağacıma eklenmesi ve openshift profilinin maven pom.xml dosyama dahil edilmesiydi.

Bu, büyük olasılıkla, deponuzu yeni openshift yukarı akışla birleştirdiğinizde gerçekleşecek olanla aynıdır. Benim için, adietisheim'in harika cevabındaki aşağıdaki cümlenin ardındaki "neden" budur:

"Daha sonra kodu yerel git deponuzdan openshift'e aktarabilmek için önce openshift deponuzu yerel bitbucket klonunuzla birleştirmeniz gerekir."

Benim durumumda, yapılandırma dosyalarını .openshift dizininden almak için bu birleştirme gerekliydi. Benim için çözmem uzun zaman aldı çünkü .openshift dizini olmadan zorlamak hala uygulamamın başarılı bir şekilde oluşturulmasını ve dağıtılmasını sağladı. Gördüğüm tek davranış, eksik jsp dosyalarıyla ilgili bir rapordur, bu da sorunun kendi web.xml ve servlet yapılandırmamla ilgili olduğunu düşünmeme neden oldu.



0

Java kullanıyorsanız, alternatif bir yaklaşım var. Ancak bu yaklaşımda bile yine de OpenShift git deposunu kullanırsınız. OpenShift tarafından sağlanan git deposu, OpenShift'e kodunuzu, konuşlandırılabilir dosyalarınızı nasıl verdiğinizdir:

Kodunuzu OpenShift git deposuna işlemek yerine, ona savaş dosyanızı verebilirsiniz. OpenShift git deposunu yerel makinenize klonlarsınız. Daha sonra uygulama kaynağınızdan bir savaş oluşturursunuz ve bu savaşı OpenShift git deponuzdaki (klon) konuşlandırmalar klasörüne koyarsınız. Daha sonra yerel klonunuzu OpenShift'e ekler, gerçekleştirir ve gönderirsiniz. İtme başarıyla yürütüldüğünde, JBoss AS7 savaşınızı seçecek ve konuşlandıracaktır.


0

KOLAY GELSİN!

1. adım: Uygulama oluşturun. En sevdiğiniz yöntemle (gitRepository'den, ön yapımcı Openshift'ten vb.). Konsol yöntemi
adım 2: rhc git-clone nameApp
Adım 3: rhc app-configure nameApp --auto-deploy
Adım 4: KEYFİNİ KULLANIN!


Sorun değil, ama sorunun cevabı bu değildi :)
Janos Vinceller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.