ฉันสามารถใช้ git repo ที่มีอยู่กับ openshift ได้หรือไม่


102

จำเป็นต้องมี git repo บน openshift เท่านั้นหรือไม่? ฉันมี bitbucket / github git repo อยู่แล้วและต้องการผลักดันที่นั่นเท่านั้น ฉันสามารถเชื่อมต่อกับมันเพื่อให้ openshift ได้รับการข่มขู่หรือไม่?

หรือเพื่อให้ง่ายขึ้นฉันกดที่ github เท่านั้น แต่เมื่อฉันต้องการปรับใช้ฉันจะทำอะไรบางอย่างกับ openshift?

ฉันตรวจสอบสิ่งนี้แล้วแต่มันทำให้ฉันสับสน: มันกำลังพูดถึงการรวมการออกและคอมไพล์ใหม่ (openshift)?


6
คุณสามารถพิสูจน์คำถามได้หรือไม่? มันยากมากที่จะเข้าใจ
Matt Fenwick

คำตอบ:


226

ฉันรู้สึกว่าคุณยังไม่คุ้นเคยกับการใช้คอมไพล์มากพอ ฉันขอแนะนำให้คุณเข้าสู่ git เพื่อทำความเข้าใจอย่างถ่องแท้ว่าจะพุชโค้ดของคุณไปยัง openshift ได้อย่างไร อย่างไรก็ตามให้ฉันพยายามอธิบายขั้นตอนที่เกี่ยวข้องให้คุณ: เช่นเดียวกับที่คุณทำกับ git โดยทั่วไปแนวทางในการเลือกที่นี่คือการโคลน repo git อื่น ๆ ของคุณ (เช่นบน bitbucket) ไปยังเครื่องในพื้นที่ของคุณ:

git clone <bitbucket-repo-url>

โคลนในเครื่องของคุณจะมี repo อื่น ๆ ของคุณ (bitbucket เป็นต้น) เป็น repo ระยะไกล repo ระยะไกลของคุณจะถูกเก็บไว้ด้วยนามแฝง "origin" (นามแฝงเริ่มต้นที่ git ใช้หากคุณโคลน) จากนั้นคุณเพิ่ม repo openshift เป็นรีโมตลงในโคลนของคุณ คุณทำได้ในขณะที่ใช้นามแฝงสำหรับ repo ระยะไกลที่คุณเพิ่มอย่างชัดเจน - ฉันใช้ "openshift" เป็นนามแฝงที่นี่:

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

เพื่อที่จะสามารถพุชโค้ดจาก git repo ในพื้นที่ของคุณไปยัง openshift ได้ก่อนอื่นคุณต้องรวม repo openshift ของคุณกับโคลน bitbucket ในเครื่องของคุณ คุณทำได้โดยการออกในประเทศ:

git merge openshift/master -s recursive -X ours

ด้วยคำสั่งนี้คุณบอกให้คอมไพล์รวมสาขาหลักในที่เก็บ git ของ openshift กับ repo คอมไพล์ในเครื่องของคุณ คุณบอกให้ผสานโดยใช้กลยุทธ์การผสานแบบเรียกซ้ำและเลือกเวอร์ชัน ("ของเรา") ของคุณเมื่อมีข้อขัดแย้ง

เมื่อดำเนินการผสานคุณก็พร้อมที่จะผลักดัน git repo ของคุณไปที่ openshift คุณทำได้โดยทำ:

git push openshift HEAD

คุณบอกให้คอมไพล์พุชโค้ดในเครื่องของคุณไปยังสาขา HEAD บน repo ระยะไกลที่เรียกว่า "openshift" (นามแฝงที่เราจัดเก็บที่เก็บ git openshift ไว้ที่บางย่อหน้าขึ้นไป)

btw. ผมเขียนบล็อกเครื่องมือ JBoss ซึ่งแสดงให้เห็นถึงวิธีการใช้ OpenShift-Java ลูกค้าบางเดือนที่ผ่านมา: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client คุณจะเห็นขั้นตอนข้างต้นในย่อหน้าสุดท้าย "เกือบจะถึงแล้ว"


30
ฉันคิดว่าสิ่งนี้ยังไม่ตอบคำถาม คำถามเกี่ยวกับการไม่ใช้ git repo ของ openshift เป็นรีโมต แต่ใช้ repo บน github (หรือ bitbucket สำหรับเรื่องนั้น) แทน git repo การผลักดันไปยัง github repo ที่ใช้สำหรับการทำงานร่วมกันควรตรวจสอบให้แน่ใจว่าได้รับการแสดงผลใน openshift ฉันก็มองหาเหมือนกัน แต่ไม่พบคำตอบ ฉันจะพยายามอัปเดตว่าฉันมีวิธีแก้ปัญหานี้หรือไม่
Manoj NV

9
คุณไม่สามารถใช้ที่เก็บ git ของ openshift ได้ git repo ภายใน OpenShift คือวิธีที่คุณส่งมอบรหัสของคุณให้ OpenShift ไม่มีทางเลือกอื่นไม่มี "ใช้ github แทน" ดังที่ฉันได้พยายามสรุปไว้ข้างต้น git repo บน OpenShift ไม่ได้ยกเว้นคุณจากการใช้ github หากคุณใช้ github / bitbucket / XX เป็น repo การควบคุมแหล่งที่มาหลักของคุณและผู้ใช้ส่วนใหญ่จะทำเช่นนั้นคุณก็เพียงแค่เพิ่มที่เก็บ git ของ OpenShift เป็นรีโมตให้กับ github / bitbucket / XX-clone ในเครื่องของคุณ การผลักดันไปที่ OpenShift จะเทียบเท่ากับการปรับใช้ OpenShift
adietisheim

1
ถ้าฉันเข้าใจถ้าฉันทำงานกับ openshift ฉันควรจะทำงานร่วมกับ repo การพัฒนา (เช่น github) และถ้าฉันต้องการปรับใช้เพียงแค่กดที่ openshift HEAD, riht?
Ricardo

1
ที่น่าสังเกตว่าแฟล็ก -f และส่วน ssh ของ git URL นั้นจำเป็นทั้งคู่
Simon H

1
@adietisheim ด้วย git 2.9 ใหม่คุณจะต้องเพิ่ม--allow-unrelated-historiesเนื่องจากค่าเริ่มต้นของ git เปลี่ยนไปไม่อนุญาตให้รวมประวัติที่ไม่เกี่ยวข้องกัน
Alon Burg

23

ฉันรู้ว่าคำถามนี้มีอายุ 2 ปีและยอมรับคำตอบของ @ adietisheimแล้ว โดยส่วนตัวแล้วฉันไม่ชอบที่จะรวม repo openshift เข้ากับโคลนในเครื่องของฉันเพราะฉันไม่ต้องการผสมที่เก็บ OpenShift เข้ากับสาขาหลักของ repo สาธารณะของฉัน

สมมติว่าคุณได้เพิ่มรีโมตโดยใช้git remote add openshift <openshift-git-repo-url>นี่คือสิ่งที่ฉันจะทำ:

สร้างสาขาท้องถิ่นใหม่openshiftโดยยึดตามmasterสาขา

git checkout -b openshift

คุณสามารถดำเนินการบางอย่างกับสาขาopenshiftเช่นการกำหนดค่าการปรับใช้แอปของคุณ จากนั้นดันสาขาปัจจุบันไปยังต้นแบบการจับคู่การอ้างอิงระยะไกลในที่เก็บ OpenShift พร้อมกับแฟล็ก-fเพื่อเขียนทับทุกอย่างในรีโมตmasterสาขา

git push openshift master -f

เมื่อใดก็ตามที่ฉันต้องการปรับใช้แอปของฉันกับ OpenShift ฉันจะตรวจสอบopenshiftสาขาในพื้นที่และรวมmasterสาขาเข้าด้วยกันจากนั้นบังคับให้กดไปที่ OpenShift อย่างไรก็ตาม-fอาจไม่จำเป็นสำหรับการพุชครั้งต่อไป:

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

6

จากโฟลเดอร์โครงการของคุณให้ทำ

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

คุณสามารถอ่านผลักดันสองต้นกำเนิดจากระยะไกลคอมไพล์จากพื้นที่เก็บข้อมูลและการเปลี่ยนแหล่งที่มาคอมไพล์ระยะไกล


git push backup masterก็เพียงพอแล้วคุณไม่จำเป็นต้องระบุทั้งสองด้านของ refspec

1
เคล็ดลับในการกดไปที่รีโมท 2 git นั้นสมบูรณ์แบบ จากนั้นคุณสามารถทำ a: git push -u allto 'all' เป็นรีโมทเริ่มต้น เมื่อทำgit pushมันจะผลักดันไปยัง 2 repos ในเวลาต่อมา!
Akram Ben Aissi

5

ฉันเห็นด้วยกับคำตอบของ @ adietisheim: คุณต้องเข้าใจ git ให้ดีขึ้นก่อนที่จะปรับใช้กับ openshift =)

แม้ว่าคุณจะเข้าใจ git แต่ก็ไม่จำเป็นต้องชัดเจนว่าจะปรับใช้ repo ที่มีอยู่ของคุณอย่างไรหากโครงสร้างไดเร็กทอรีของคุณไม่ตรงกับโครงสร้างไดเร็กทอรีที่ openshift ต้องการและหากคุณต้องการคงโครงสร้างไดเร็กทอรีเก่าไว้

สำหรับสิ่งนั้นฉันมีเคล็ดลับต่อไปนี้:

  • อ็อพชันแยกต่างหากที่การปรับใช้ขึ้นอยู่กับอ็อพชันที่ไม่ได้อยู่ในไฟล์อื่น ตัวอย่างเช่นฉันแยกการตั้งค่าฐานข้อมูลออกจากการตั้งค่าอื่น ๆ เป็นไฟล์ต่างๆดังนี้:

    • settings_deploy / openshift

    • settings_deploy / localhost

    จากนั้น symlink ไปยังการทดสอบ localhost ของคุณดังนี้:

    ln -s settings_deploy/localhost settings_deploy_file
    

    อีกทางเลือกหนึ่งคือการตรวจหาโฮสต์โดยใช้ตัวแปรสภาพแวดล้อม:

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

    วิธีนี้ง่ายกว่าเล็กน้อยเนื่องจากช่วยให้คุณสามารถวางการกำหนดค่าทั้งหมดลงในไฟล์เดียวได้ มันค่อนข้างทั่วไปน้อยกว่าเล็กน้อยเนื่องจากหากโฮสต์อื่นของคุณมีOPENSHIFT_APP_NAMEตัวแปรสภาพแวดล้อม (ไม่น่าเป็นไปได้สำหรับอันนี้) วิธีการหยุดทำงาน อย่างไรก็ตามคุณยังคงต้องแยกให้ชัดเจนว่าการปรับใช้ขึ้นอยู่กับอะไรและสิ่งที่ไม่

  • สร้างไดเร็กทอรีการปรับใช้ภายในเครื่อง

  • โคลนเทมเพลต openshift เริ่มต้นไว้ในนั้น

  • สร้างสคริปต์ปรับใช้ที่:

    • ฮาร์ดลิงก์ทุกอย่างตั้งแต่ท้องถิ่นเดิมของคุณไปจนถึงตำแหน่งที่ถูกต้องที่ไฟล์

      ฮาร์ดลิงก์สร้างได้รวดเร็วและใช้หน่วยความจำน้อยมาก

      คุณสามารถใช้สิ่งต่างๆเช่น:

      cp -lrf original_repo_dir deploy_repo_dir

    • เก็บเฉพาะsettings_deployไฟล์ที่ถูกต้องใน Deploy repo:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • แรงผลัก:

      cd deploy_repo

      git push -f origin master

    • ทำความสะอาด Deploy repo:

      git reset --hard HEAD

      git clean -df

สำหรับผู้ที่สนใจในการปรับใช้ django ฉันมีตัวอย่างเกี่ยวกับgithub ของฉันโดยเฉพาะอย่างยิ่งตรวจสอบdeploy.shสคริปต์และโครงการprojects/elearnที่ปรับใช้


4

คุณควรจะสามารถส่งต่อในที่เก็บ Git ที่มีอยู่ไปยังท่อส่งเนื้อหาผ่าน

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

จากนั้นที่เก็บ Git ระยะไกลจะส่งมอบแอปพลิเคชันเริ่มต้นสำหรับ OpenShift

ในความเป็นไปได้ที่สองคุณสามารถข้ามการสร้างที่เก็บ OpenSHift Git ในเครื่องผ่าน

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

จากนั้นใช้ขั้นตอนที่อธิบายไว้ข้างต้นเพื่อรวมที่เก็บ Git ระยะไกลของ OpenShift เข้ากับที่เก็บ Git ในเครื่องของคุณ


4

คำตอบของ Mohannd นั้นสมบูรณ์แบบ แต่ฉันต้องการสรุปวิธีแก้ปัญหาที่สมบูรณ์ในกรณีที่ต้องการอย่างอื่น:

ในการใช้ github repo ของคุณเป็น repo ของ Openshift ตอนนี้ยังไม่มีโซลูชันที่สมบูรณ์แบบเพราะ Openshfit ใช้ git hooks เพื่อเริ่มการปรับใช้หรือการปรับใช้ใหม่ตามข้อตกลงของคุณ อย่างไรก็ตามวิธีที่ชาญฉลาดที่สุดคือการใช้ 2 repos (อันที่เปิดขึ้นและอันหนึ่งของ github ของคุณ) เพื่อดันโค้ดไปพร้อม ๆ กัน

โดยเพิ่มรีโมตชื่อ "all" และเพิ่ม 2 push url เข้าไป

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

จากนั้นตั้งค่ารีโมทชื่อ 'all' เป็นรีโมตพุชเริ่มต้น:

git push -u all

ในการคอมมิตและพุชโค้ดของคุณให้ดำเนินการตามปกติ: มันจะกดรีโมต 2 ตัวและปรับใช้บน OpenShift

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

และดูผลลัพธ์:

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

หวังว่านี่จะช่วยได้


คุณมีข้อผิดพลาด คุณสามารถมีที่เก็บได้หลายที่ แต่ไม่สามารถตั้งชื่อว่า "ต้นกำเนิด" ได้ ต้องไม่เหมือนใครเช่นต้นกำเนิดและต้นกำเนิด2
Eric P

ใช้การใช้งานนี้ แต่ฉันได้รับข้อผิดพลาดที่ระบุว่าไม่มี 'openshift-git-repo' จากระยะไกลเช่นนั้น .. ฉันคิดว่ามีสคริปต์ด้านบนหายไป ..
Arman Ortega

2

มีวิธีทำตามที่คุณต้องการคือข้าม repo ของ Openshift สิ่งที่คุณต้องทำคือตั้งค่าเจนกินส์และสร้างโพลสำรวจพื้นที่เก็บข้อมูลของคุณเอง

มีลิงค์ที่อธิบายวิธีการตั้งค่าตั้งแต่ต้น: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html


1

ฉันพบปัญหาในการปรับใช้ที่เก็บโค้ดที่มีอยู่แล้วกับ Openshift ในบริบทเฉพาะของฉันที่ฉันพยายามปรับใช้เว็บแอพ tomcat ไฟล์คอนฟิกูเรชันของ Openshift tomcat ที่รวมอยู่ในโฟลเดอร์. openshift นั้นสำคัญมาก

สิ่งที่แก้ไขให้ฉันคือการรวมโฟลเดอร์. openhift ไว้ในแผนผังซอร์สที่มีอยู่ของฉันรวมถึงการรวมโปรไฟล์ openshift ไว้ในไฟล์ maven pom.xml ของฉัน

สิ่งนี้มีความเป็นไปได้สูงที่จะเกิดขึ้นโดยการรวมที่เก็บของคุณเข้ากับ openhift upstream ใหม่ สำหรับฉันนี่คือ "ทำไม" ที่อยู่เบื้องหลังประโยคต่อไปนี้ในคำตอบที่ดีของ adietisheim:

"เพื่อที่จะสามารถพุชโค้ดจาก git repo ในพื้นที่ของคุณไปยัง openshift ได้ก่อนอื่นคุณต้องรวม repo ของ openshift กับโคลน bitbucket ในพื้นที่ของคุณ"

ในกรณีของฉันการผสานนี้จำเป็นเพื่อรับไฟล์ config จากไดเร็กทอรี. openshift ฉันใช้เวลานานในการค้นหาเพราะการกดโดยไม่มีไดเร็กทอรี. openhift ยังคงทำให้แอปของฉันสร้างและปรับใช้งานได้สำเร็จ พฤติกรรมเดียวที่ฉันเห็นคือรายงานเกี่ยวกับไฟล์ jsp ที่หายไปซึ่งทำให้ฉันคิดว่าปัญหาเกี่ยวข้องกับการกำหนดค่า web.xml และ servlet ของฉันเอง



0

หากคุณใช้ java มีทางเลือกอื่น แต่แม้ในวิธีนี้คุณจะยังคงใช้ที่เก็บ git ของ OpenShift ที่เก็บ git ที่ OpenShift จัดเตรียมไว้คือวิธีที่คุณให้ OpenShift โค้ดของคุณซึ่งสามารถทำให้ใช้งานได้ของคุณ:

คุณสามารถ - แทนที่จะส่งรหัสของคุณไปที่ OpenShift git repo - เพียงแค่ให้ไฟล์ war ของคุณ คุณโคลนที่เก็บ git OpenShift ไปยังเครื่องของคุณ จากนั้นคุณสร้างสงครามจากแหล่งที่มาของแอปพลิเคชันของคุณและใส่สงครามนี้ลงในโฟลเดอร์การปรับใช้ภายใน OpenShift git repo (โคลน) ของคุณ จากนั้นคุณเพิ่มยอมรับและผลักดันโคลนในเครื่องของคุณไปยัง OpenShift เมื่อการกดดำเนินการสำเร็จ JBoss AS7 จะเลือกสงครามของคุณและปรับใช้


0

สบาย ๆ!

ขั้นตอนที่ 1: สร้างแอป ด้วยวิธีการที่คุณชื่นชอบ (จาก gitRepository, Pre-maker Openshift ฯลฯ ) หากคุณใช้คอนโซล metod
ขั้นตอนที่ 2: rhc git-clone nameApp
ขั้นตอนที่ 3: rhc app-configure nameApp --auto-deploy
ขั้นตอนที่ 4: สนุก!


ไม่เป็นไร แต่นั่นไม่ใช่คำตอบสำหรับคำถาม :)
Janos Vinceller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.