Bisakah saya menggunakan repo git saya yang sudah ada dengan openshift?


102

Apakah perlu memiliki git repo hanya di openshift? Saya sudah memiliki repo git bitbucket / github dan lebih suka mendorong ke sana saja. Bisakah saya langsung mengaitkannya sehingga openshift mendapat isyarat?

Atau untuk penyederhanaan, saya hanya mendorong di github, tetapi ketika saya ingin menerapkan, saya melakukan sesuatu dengan openshift?

Saya melakukan cek ini tapi saya bingung: itu berbicara tentang penggabungan keluar dan baru (openshift) git?


6
Bisakah Anda mengoreksi pertanyaan itu? Sangat sulit untuk dimengerti.
Matt Fenwick

Jawaban:


226

Saya mendapat kesan bahwa Anda belum terbiasa menggunakan git. Saya menyarankan Anda untuk masuk ke git untuk memahami sepenuhnya cara mendorong kode Anda ke openshift. Namun demikian izinkan saya mencoba menjelaskan kepada Anda langkah-langkah yang terlibat: Seperti yang akan Anda lakukan dengan git pada umumnya, pendekatan yang dipilih di sini adalah dengan mengkloning repo git Anda yang lain (mis. Di bitbucket) ke mesin lokal Anda:

git clone <bitbucket-repo-url>

Klon lokal Anda kemudian memiliki repo Anda yang lain (bitbucket dll.) Sebagai repo jarak jauh. Repo jarak jauh Anda disimpan dengan alias "origin" (alias default yang digunakan oleh git jika Anda menggandakan). Anda kemudian menambahkan repo openshift sebagai remote ke klon Anda. Anda melakukannya saat secara eksplisit menggunakan alias untuk repo jarak jauh yang Anda tambahkan - saya menggunakan "openshift" sebagai alias di sini:

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

Agar dapat mendorong kode dari repo git lokal Anda ke openshift, pertama-tama Anda harus menggabungkan repo openshift dengan klon bitbucket lokal Anda. Anda melakukannya dengan menerbitkan secara lokal:

git merge openshift/master -s recursive -X ours

Dengan perintah ini Anda memberi tahu git untuk menggabungkan cabang master di repo git openshift dengan repo git lokal Anda. Anda menyuruhnya untuk menggabungkan menggunakan strategi penggabungan rekursif dan memilih versi ("milik kami") Anda ketika ada konflik.

Setelah penggabungan dijalankan, Anda siap untuk mendorong repo git Anda ke openshift. Anda melakukannya dengan melakukan:

git push openshift HEAD

Anda memberi tahu git untuk mendorong kode lokal Anda ke cabang HEAD pada repo jarak jauh yang disebut "openshift" (alias kami menyimpan repo git openshift, beberapa paragraf lebih jauh).

btw. Saya menulis blog jboss tools yang mendemonstrasikan cara menggunakan openshift-java-client beberapa bulan yang lalu: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Anda akan melihat langkah-langkah di atas pada paragraf terakhir "Kita hampir sampai".


30
Saya pikir ini masih belum menjawab pertanyaan itu. Pertanyaannya adalah tentang tidak menggunakan repo git openshift sebagai remote, tetapi menggunakan repo di github (atau bitbucket dalam hal ini) sebagai repo git. Dorongan ke repo github yang digunakan untuk berkolaborasi juga harus memastikan bahwa itu tercermin dalam openshift. Saya juga sedang mencari yang sama tapi belum menemukan jawabannya. Saya akan mencoba memperbarui jika saya mendapatkan solusi untuk ini
Manoj NV

9
Anda tidak dapat tidak menggunakan repo git openshift. Git repo dalam OpenShift adalah cara Anda menyerahkan OpenShift kode Anda. Tidak ada alternatif, tidak ada "gunakan github sebagai gantinya". Seperti yang saya coba uraikan di atas, git repo di OpenShift tidak mengecualikan Anda dari menggunakan github. Jika Anda menggunakan github / bitbucket / XX sebagai repo kendali sumber master Anda - dan sebagian besar pengguna akan melakukannya -, maka Anda cukup menambahkan repo git OpenShift sebagai remote ke github / bitbucket / XX-clone lokal Anda. Mendorong ke OpenShift kemudian setara dengan melakukan deplyo ke OpenShift.
adietisheim

1
Jika saya memahaminya, jika saya bekerja dengan openshift saya harus bekerja dengan repo pengembangan (misalnya github) dan jika saya ingin menerapkannya cukup tekan KEPALA openshift, ya?
Ricardo

1
Perlu dicatat bahwa -f flag, dan ssh bagian dari git URL keduanya penting
Simon H

1
@adietisheim dengan git 2.9 baru Anda perlu menambahkan --allow-unrelated-historieskarena git default telah berubah untuk tidak mengizinkan penggabungan riwayat yang tidak terkait.
Alon Burg

23

Saya tahu pertanyaannya berumur 2 tahun dan jawaban @adietisheim telah diterima. Saya pribadi tidak suka menggabungkan repo openshift ke klon lokal saya karena saya tidak ingin mencampur repo OpenShift ke dalam cabang master dari repo publik saya.

Dengan asumsi Anda telah menambahkan penggunaan jarak jauh git remote add openshift <openshift-git-repo-url>, inilah yang akan saya lakukan:

Buat cabang lokal baru openshiftberdasarkan mastercabang tersebut.

git checkout -b openshift

Anda bisa membuat beberapa komitmen di cabang openshiftseperti konfigurasi penerapan aplikasi Anda. Kemudian, dorong cabang saat ini ke master pencocokan ref jarak jauh di repositori OpenShift dengan bendera -funtuk menimpa semuanya di mastercabang jarak jauh .

git push openshift master -f

Setiap kali saya ingin menerapkan aplikasi saya ke OpenShift, saya akan memeriksa openshiftcabang lokal dan menggabungkan mastercabang dengannya, lalu memaksa push ke OpenShift, namun -fmungkin tidak diperlukan untuk dorongan berikutnya:

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

6

Dari folder proyek Anda, lakukan

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

Anda dapat membaca Mendorong ke dua asal jarak jauh git dari satu repositori dan Mengubah asal jarak jauh git .


git push backup mastersudah cukup, Anda tidak perlu menentukan kedua sisi refspec tersebut.

1
Ujung untuk mendorong ke remote 2 git sempurna. Anda juga dapat melakukan: git push -u allke 'semua' ke remote default. Saat melakukan git push, itu akan mendorong ke 2 repo!
Akram Ben Aissi

5

Saya setuju dengan jawaban @adietisheim: Anda perlu memahami lebih baik git sebelum menerapkan dengan openshift =)

Sekarang, meskipun Anda memahami git, belum tentu jelas bagaimana menerapkan repo yang ada jika struktur direktori Anda tidak cocok dengan struktur direktori yang diperlukan oleh openshift, dan jika Anda ingin mempertahankan struktur direktori lama Anda.

Untuk itu, saya punya tips berikut ini:

  • opsi terpisah yang bergantung pada penyebaran dari yang tidak ke dalam file yang berbeda. Misalnya, saya memisahkan pengaturan database saya dari pengaturan lain menjadi file yang berbeda seperti:

    • settings_deploy / openshift

    • settings_deploy / localhost

    dan kemudian symlink ke pengujian localhost Anda sebagai sesuatu seperti:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Pilihan lainnya adalah mendeteksi host dengan menggunakan variabel lingkungan:

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

    Ini sedikit lebih sederhana karena memungkinkan Anda untuk meletakkan semua konfigurasi pada satu file. Ini sedikit kurang umum, karena jika salah satu dari host Anda menawarkan OPENSHIFT_APP_NAMEvariabel lingkungan (tidak mungkin untuk yang ini) metode tersebut akan rusak. Bagaimanapun, Anda masih harus memisahkan dengan jelas apa yang bergantung pada penerapan dan yang tidak.

  • buat direktori penerapan lokal

  • mengkloning template openshift awal ke dalamnya

  • buat skrip penerapan yang:

    • hardlink semuanya dari lokal lama Anda yang ada ke lokasi yang benar di

      hardlink cepat dibuat dan menggunakan sedikit memori

      Anda bisa menggunakan sesuatu seperti:

      cp -lrf original_repo_dir deploy_repo_dir

    • simpan hanya settings_deployfile yang benar di repo penerapan:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • memaksa mendorong:

      cd deploy_repo

      git push -f origin master

    • bersihkan repo penerapan:

      git reset --hard HEAD

      git clean -df

bagi mereka yang tertarik dengan django deployment, saya punya contoh di github saya , secara khusus memeriksa deploy.shskrip dan proyek projects/elearnyang di-deploy.


4

Anda seharusnya dapat meneruskan repositori Git yang ada ke dalam pipeline aset melalui

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

Repositori Git jarak jauh kemudian mengirimkan aplikasi awal untuk OpenShift.

Sebagai kemungkinan kedua, Anda dapat melewati pembuatan repositori OpenSHift Git lokal melalui

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

lalu gunakan langkah-langkah yang dijelaskan di atas untuk menggabungkan repositori Git jarak jauh OpenShift ke dalam repositori Git lokal Anda.


4

Jawaban Mohannd sempurna, tetapi saya ingin merangkum solusi lengkapnya, jika ada orang lain yang membutuhkannya:

Untuk menggunakan repo github Anda sebagai repo Openshift, saat ini tidak ada solusi yang tepat, karena Openhfit menggunakan git hooks untuk memicu penerapan atau penempatan ulang berdasarkan komitmen Anda. Namun, cara paling cerdas adalah menggunakan 2 repo (yang openshift dan github Anda) untuk mendorong kode secara bersamaan.

Untuk melakukannya: Tambahkan remote bernama "semua" dan tambahkan 2 url push ke dalamnya.

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

Kemudian setel remote dengan nama 'all' sebagai remote push default:

git push -u all

Untuk melakukan dan memasukkan kode Anda, lanjutkan seperti biasa: Ini akan mendorong 2 remote dan menerapkan pada OpenShift

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

Dan lihat hasilnya:

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

Semoga ini membantu


Anda mengalami kesalahan. Anda dapat memiliki beberapa repositori, tetapi keduanya tidak dapat dinamai "origin". Mereka harus unik, seperti: origin dan origin2
Eric P

menggunakan implementasi ini tetapi saya mendapat kesalahan yang mengatakan Tidak ada remote seperti 'openshift-git-repo' .. saya pikir ada yang hilang pada skrip di atas ..
Arman Ortega


1

Saya mengalami masalah dalam menerapkan repositori kode yang sudah ada sebelumnya ke Openshift. Dalam konteks khusus saya, di mana saya mencoba menerapkan webapp tomcat, file konfigurasi tomcat Openshift yang disertakan dalam folder .openshift sangat penting.

Yang memperbaikinya bagi saya adalah dimasukkannya folder .openshift di pohon sumber saya yang sudah ada, serta penyertaan profil openshift di file maven pom.xml saya.

Hal ini sangat mungkin terjadi dengan menggabungkan repositori Anda dengan yang upstream baru openshift. Bagi saya, inilah "mengapa" di balik kalimat berikut dalam jawaban bagus adietisheim:

"Agar dapat mendorong kode dari repo git lokal Anda ke openshift, pertama-tama Anda harus menggabungkan repo openshift dengan klon bitbucket lokal Anda."

Dalam kasus saya, penggabungan ini diperlukan untuk mendapatkan file konfigurasi dari direktori .openshift. Butuh waktu lama untuk mengetahuinya karena mendorong tanpa direktori .openshift masih membuat aplikasi saya berhasil dibangun dan diterapkan. Satu-satunya perilaku yang saya lihat adalah laporan tentang file jsp yang hilang, yang membuat saya berpikir bahwa masalahnya terkait dengan konfigurasi web.xml dan servlet saya sendiri.



0

Jika Anda menggunakan java maka ada pendekatan alternatif. Tetapi bahkan dalam pendekatan ini Anda masih akan menggunakan repositori git OpenShift. Repositori git yang disediakan oleh OpenShift adalah cara Anda memberikan OpenShift kode Anda, yang dapat Anda terapkan:

Anda dapat - alih-alih memasukkan kode Anda ke OpenShift git repo - cukup berikan file perang Anda. Anda mengkloning repo git OpenShift ke komputer lokal Anda. Anda kemudian membangun perang dari sumber aplikasi Anda dan meletakkan perang ini ke dalam folder penerapan dalam repo git OpenShift Anda (klon). Anda kemudian menambahkan, melakukan dan mendorong klon lokal Anda ke OpenShift. Setelah dorongan berhasil dijalankan, JBoss AS7 akan memilih perang Anda dan menyebarkannya.


0

AMBIL MUDAH!

langkah 1: Buat aplikasi. Dengan metode favorit Anda (dari gitRepository, pra-pembuat Openshift, dll). jika Anda menggunakan metode konsol
langkah 2: rhc git-clone nameApp
langkah 3: rhc app-configure nameApp --auto-deploy
langkah 4: NIKMATI!


Tidak apa-apa, tapi itu bukan jawaban atas pertanyaan :)
Janos Vinceller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.