Tôi có thể sử dụng git repo hiện có của mình với openshift không?


102

Có cần thiết phải có git repo chỉ trên openshift không? Tôi đã có bitbucket / github git repo và chỉ muốn đẩy vào đó. Tôi có thể đơn giản kết nối vào nó để openhift có được sự thân mật?

Hoặc để đơn giản hóa, tôi chỉ push tại github, nhưng khi tôi muốn triển khai, tôi làm gì đó với openshift?

Tôi đã kiểm tra điều này nhưng nó làm tôi bối rối: nó đang nói về việc hợp nhất git thoát và mới (openshift)?


6
Bạn có thể đọc lại câu hỏi không? Nó rất khó hiểu.
Matt Fenwick

Câu trả lời:


226

Tôi có ấn tượng rằng bạn chưa sử dụng đủ git. Tôi khuyên bạn nên truy cập vào git để hiểu đầy đủ cách đẩy mã của bạn sang openshift. Tuy nhiên, hãy để tôi cố gắng giải thích cho bạn các bước liên quan: Như bạn làm với git nói chung, cách tiếp cận để chọn ở đây là sao chép git repo khác của bạn (ví dụ: trên bitbucket) vào máy cục bộ của bạn:

git clone <bitbucket-repo-url>

Bản sao cục bộ của bạn sau đó có repo khác của bạn (bitbucket, v.v.) làm repo từ xa. Repo từ xa của bạn được lưu trữ với bí danh "origin" (bí danh mặc định được git sử dụng nếu bạn sao chép). Sau đó, bạn thêm repo openshift làm điều khiển từ xa vào bản sao của mình. Bạn làm điều đó trong khi sử dụng rõ ràng bí danh cho repo từ xa mà bạn thêm vào - Tôi đang sử dụng "openshift" làm bí danh ở đây:

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

Để sau đó có thể đẩy mã từ repo git cục bộ của bạn sang openshift, trước tiên, bạn phải hợp nhất kho openshift với bản sao bitbucket cục bộ của bạn. Bạn làm điều đó bằng cách phát hành cục bộ:

git merge openshift/master -s recursive -X ours

Với lệnh này, bạn yêu cầu git hợp nhất nhánh chính trong repo git openshift với repo git cục bộ của bạn. Bạn yêu cầu nó hợp nhất bằng cách sử dụng chiến lược hợp nhất đệ quy và chọn phiên bản ("của chúng tôi") của bạn khi có xung đột.

Khi quá trình hợp nhất được thực hiện, bạn đã sẵn sàng đẩy git repo của mình sang openshift. Bạn làm điều đó bằng cách:

git push openshift HEAD

Bạn yêu cầu git đẩy mã cục bộ của bạn đến nhánh HEAD trên repo từ xa được gọi là "openshift" (bí danh chúng tôi đã lưu trữ repo git openshift tại, một số đoạn ở trên).

btw. Tôi đã viết một blog về công cụ jboss trình bày cách sử dụng openshift-java-client vài tháng trước: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Bạn sẽ nhận ra các bước trên trong đoạn cuối "Chúng tôi sắp hoàn thành".


30
Tôi nghĩ rằng điều này vẫn không trả lời câu hỏi. Câu hỏi là về việc không sử dụng git repo của openshift làm điều khiển từ xa, mà thay vào đó sử dụng repo trên github (hoặc bitbucket cho vấn đề đó) làm git repo. Việc đẩy tới repo github được sử dụng để cộng tác cũng phải đảm bảo rằng nó được phản ánh trong openshift. Tôi cũng đang tìm kiếm tương tự nhưng chưa tìm ra câu trả lời. Tôi sẽ cố gắng cập nhật nếu tôi nhận được một giải pháp cho điều này
Manoj NV

9
Bạn không thể không sử dụng repo git openshift. Git repo trong OpenShift là cách bạn chuyển mã OpenShift của mình. Không có thay thế, không có "sử dụng github thay thế". Như tôi đã cố gắng phác thảo ở trên, git repo trên OpenShift không loại trừ việc bạn sử dụng github. Nếu bạn sử dụng github / bitbucket / XX làm repo kiểm soát nguồn chính của mình - và hầu hết người dùng sẽ làm điều đó - thì bạn chỉ cần thêm repo git OpenShift làm điều khiển từ xa vào github / bitbucket / XX-clone cục bộ của mình. Việc đẩy đến OpenShift sau đó tương đương với việc chuyển sang OpenShift.
adietisheim

1
Nếu tôi hiểu điều đó, nếu tôi làm việc với openshift, tôi nên làm việc với repo phát triển (ví dụ: github) và nếu tôi muốn triển khai nó, chỉ cần đẩy lên openshift HEAD, riht?
Ricardo

1
Cần lưu ý rằng cờ -f và phần ssh của URL git đều rất cần thiết
Simon H

1
@adietisheim với git 2.9 mới, bạn sẽ cần thêm --allow-unrelated-historiesvì git mặc định đã thay đổi để không cho phép hợp nhất các lịch sử không liên quan.
Alon Burg

23

Tôi biết câu hỏi đã có từ 2 năm trước và câu trả lời của @ adietisheim đã được chấp nhận. Cá nhân tôi không thích hợp nhất repo openshift vào bản sao cục bộ của mình vì tôi không muốn trộn repo OpenShift vào nhánh chính của repo công khai của mình.

Giả sử bạn đã thêm điều khiển từ xa bằng cách sử dụng git remote add openshift <openshift-git-repo-url>, đây là những gì tôi sẽ làm:

Tạo một nhánh cục bộ mới openshiftdựa trên masternhánh đó.

git checkout -b openshift

Bạn có thể thực hiện một số cam kết trên nhánh, openshiftchẳng hạn như cấu hình triển khai ứng dụng của bạn. Sau đó, đẩy nhánh hiện tại đến trình chính đối sánh tham chiếu từ xa trong kho lưu trữ OpenShift với cờ -fđể ghi đè mọi thứ trong masternhánh từ xa .

git push openshift master -f

Bất cứ khi nào tôi muốn triển khai ứng dụng của mình cho OpenShift, tôi sẽ kiểm tra openshiftnhánh cục bộ và hợp nhất masternhánh với nó, sau đó buộc đẩy sang OpenShift, tuy nhiên -fcó thể không cần thiết cho các lần đẩy tiếp theo:

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

6

Từ thư mục dự án của bạn, làm

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

Bạn có thể đọc Đẩy tới hai nguồn gốc từ xa git từ một kho lưu trữThay đổi nguồn gốc từ xa git .


git push backup masterlà đủ, bạn không cần chỉ định cả hai mặt của refspec.

1
Mẹo đẩy đến 2 git remote là hoàn hảo. Sau đó, bạn cũng có thể thực hiện: git push -u allto 'all' đối với điều khiển từ xa mặc định. Khi thực hiện git push, nó sẽ đẩy đến 2 repo sau đó!
Akram Ben Aissi

5

Tôi đồng ý với câu trả lời của @ adietisheim: bạn cần hiểu rõ hơn về git trước khi triển khai với openshift =)

Bây giờ, ngay cả khi bạn hiểu git, nó không nhất thiết phải rõ ràng làm thế nào để triển khai repo hiện có của bạn nếu cấu trúc thư mục của bạn không phù hợp với cấu trúc thư mục theo yêu cầu của openshift và nếu bạn muốn giữ cấu trúc thư mục cũ của mình.

Đối với điều đó, tôi có các mẹo sau:

  • các tùy chọn riêng biệt được triển khai phụ thuộc vào các tùy chọn không nằm trong các tệp khác nhau. Ví dụ: tôi tách cài đặt cơ sở dữ liệu của mình khỏi các cài đặt khác thành các tệp khác nhau như:

    • settings_deploy / openshift

    • settings_deploy / localhost

    và sau đó liên kết biểu tượng đến kiểm tra localhost của bạn như sau:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Một tùy chọn khác là phát hiện máy chủ lưu trữ bằng cách sử dụng các biến môi trường:

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

    Điều này đơn giản hơn một chút vì nó cho phép bạn đặt tất cả các cấu hình trên một tệp duy nhất. Nó hơi ít tổng quát hơn, vì nếu một máy chủ khác trong số các máy chủ của bạn cung cấp một OPENSHIFT_APP_NAMEbiến môi trường (không chắc cho biến này) thì phương thức sẽ bị hỏng. Dù sao đi nữa, bạn vẫn phải tách biệt rõ ràng những gì phụ thuộc vào triển khai và những gì không.

  • tạo một thư mục triển khai cục bộ

  • sao chép mẫu openshift ban đầu vào nó

  • tạo một tập lệnh triển khai:

    • liên kết cứng mọi thứ từ địa phương cũ hiện có của bạn đến vị trí chính xác của chúng tại

      liên kết cứng được tạo nhanh và sử dụng rất ít bộ nhớ

      bạn có thể sử dụng một cái gì đó như:

      cp -lrf original_repo_dir deploy_repo_dir

    • chỉ giữ đúng settings_deploytệp trong repo triển khai:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • lực đẩy:

      cd deploy_repo

      git push -f origin master

    • làm sạch repo triển khai:

      git reset --hard HEAD

      git clean -df

đối với những người quan tâm đến việc triển khai django, tôi có một ví dụ trên github của mình , cụ thể là hãy kiểm tra deploy.shtập lệnh và dự án projects/elearnmà nó triển khai.


4

Bạn sẽ có thể chuyển trong kho lưu trữ Git hiện có vào đường dẫn nội dung thông qua

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

Sau đó, kho lưu trữ Git từ xa sẽ cung cấp ứng dụng ban đầu cho OpenShift.

Như một khả năng thứ hai, bạn có thể bỏ qua việc tạo kho lưu trữ OpenSHift Git cục bộ thông qua

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

và sau đó sử dụng các bước được mô tả ở trên để hợp nhất kho lưu trữ Git từ xa của OpenShift vào kho lưu trữ Git cục bộ của bạn.


4

Câu trả lời của Mohannd là hoàn hảo, nhưng tôi muốn tóm tắt giải pháp hoàn chỉnh, trong trường hợp một số người khác cần nó:

Để sử dụng github repo của bạn làm repo Openshift, hiện tại không có giải pháp hoàn hảo, bởi vì, Openshfit sử dụng git hooks để kích hoạt triển khai hoặc tái triển khai dựa trên cam kết của bạn. Tuy nhiên, cách thông minh nhất là sử dụng 2 repo (một của openshift và của github của bạn) để đẩy đồng thời mã tới.

Để thực hiện việc này: Thêm điều khiển từ xa có tên "tất cả" và thêm 2 url đẩy vào đó.

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

Sau đó đặt điều khiển từ xa có tên 'tất cả' làm điều khiển từ xa đẩy mặc định:

git push -u all

Để cam kết và đẩy mã của bạn, hãy tiếp tục như bình thường: Nó sẽ đẩy 2 điều khiển từ xa và triển khai trên OpenShift

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

Và xem kết quả:

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

Hi vọng điêu nay co ich


Bạn có một lỗi. Bạn có thể có nhiều kho, nhưng cả hai đều không được đặt tên là "origin". Chúng phải là duy nhất, như: origin and origin2
Eric P

sử dụng thực hiện điều này, nhưng tôi đã nhận một lỗi mà nói Không như từ xa 'OpenShift-git-repo' .. tôi nghĩ rằng đó là một mất tích trên kịch bản trên ..
Arman Ortega


1

Tôi đã gặp sự cố khi triển khai kho lưu trữ mã có sẵn cho Openshift. Trong bối cảnh cụ thể của tôi, nơi tôi cố gắng triển khai ứng dụng web tomcat, các tệp cấu hình tomcat của Openshift có trong thư mục .openshift là rất quan trọng.

Điều đã khắc phục sự cố cho tôi là việc đưa thư mục .openshift vào cây nguồn hiện có của tôi, cũng như việc đưa hồ sơ openshift vào tệp maven pom.xml của tôi.

Điều này rất có thể xảy ra tương tự khi hợp nhất kho lưu trữ của bạn với kho lưu trữ mở ngược dòng mở mới. Đối với tôi, đây là "tại sao" đằng sau câu sau trong câu trả lời tuyệt vời của adietisheim:

"Để sau đó có thể đẩy mã từ repo git cục bộ của bạn sang openshift, trước tiên bạn phải hợp nhất kho openshift với bản sao bitbucket cục bộ của bạn."

Trong trường hợp của tôi, việc hợp nhất này là cần thiết để lấy các tệp cấu hình từ thư mục .openshift. Tôi mất nhiều thời gian để tìm hiểu vì việc đẩy mà không có thư mục .openshift vẫn khiến ứng dụng của tôi xây dựng và triển khai thành công. Hành vi duy nhất tôi thấy là một báo cáo về các tệp jsp bị thiếu, điều này khiến tôi nghĩ rằng sự cố liên quan đến cấu hình web.xml và servlet của riêng tôi.



0

Nếu bạn đang sử dụng java thì có một cách tiếp cận thay thế. Nhưng ngay cả trong cách tiếp cận này, bạn vẫn sẽ sử dụng kho lưu trữ git của OpenShift. Kho lưu trữ git do OpenShift cung cấp là cách bạn cung cấp mã cho OpenShift, (các) có thể triển khai của bạn:

Bạn có thể - thay vì cam kết mã của mình vào repo git OpenShift - chỉ cần cung cấp cho nó tệp chiến tranh của bạn. Bạn sao chép repo git OpenShift vào máy cục bộ của mình. Sau đó, bạn xây dựng một cuộc chiến từ nguồn ứng dụng của mình và đưa cuộc chiến này vào thư mục triển khai trong repo git OpenShift (bản sao) của bạn. Sau đó, bạn thêm, cam kết và đẩy bản sao cục bộ của mình vào OpenShift. Sau khi thực hiện thúc đẩy thành công, JBoss AS7 sẽ chọn chiến tranh của bạn và triển khai nó.


0

BÌNH TĨNH!

bước 1: Tạo ứng dụng. Với phương pháp yêu thích của bạn (từ gitRepository, pre-maker Openshift, v.v.). nếu bạn sử dụng bảng điều khiển metod
bước 2: rhc git-clone nameApp
bước 3: rhc app-configure nameApp --auto-deploy
bước 4: THƯỞNG THỨC!


Điều đó tốt, nhưng đó không phải là câu trả lời cho câu hỏi :)
Janos Vinceller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.