OpenShift와 함께 기존 git repo를 사용할 수 있습니까?


102

openshift에서만 git repo가 ​​필요합니까? 이미 bitbucket / github git repo가 ​​있으며 거기에만 푸시하는 것을 선호합니다. openshift가 암시를 받도록 간단히 연결할 수 있습니까?

또는 단순화를 위해 github에서만 푸시하지만 배포하고 싶을 때 openshift로 뭔가를합니까?

나는 이것을 확인 했지만 혼란스러워했습니다. 종료 및 새로운 (openshift) git 병합에 대해 이야기하고 있습니까?


6
질문을 교정 해 주시겠습니까? 이해하기 매우 어렵습니다.
Matt Fenwick

답변:


226

나는 당신이 아직 git을 충분히 사용하지 않는다는 인상을 받았습니다. 코드를 openshift로 푸시하는 방법을 완전히 이해하려면 git에 들어가는 것이 좋습니다. 그럼에도 불구하고 관련된 단계를 설명해 드리겠습니다. 일반적으로 git을 사용하는 것처럼 여기에서 선택하는 방법은 다른 git repo (예 : bitbucket)를 로컬 머신에 복제하는 것입니다.

git clone <bitbucket-repo-url>

로컬 복제본은 다른 리포지토리 (bitbucket 등)를 원격 리포지토리로 갖습니다. 원격 저장소는 별칭 "origin"(복제하는 경우 git에서 사용하는 기본 별칭)으로 저장됩니다. 그런 다음 openshift repo를 클론에 원격으로 추가합니다. 추가 한 원격 저장소에 대한 별칭을 명시 적으로 사용하면서 그렇게합니다. 여기서 별칭으로 "openshift"를 사용하고 있습니다.

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

그런 다음 로컬 git 저장소의 코드를 openshift로 푸시하려면 먼저 openshift 저장소를 로컬 bitbucket 복제본과 병합해야합니다. 로컬에서 발행하면됩니다.

git merge openshift/master -s recursive -X ours

이 명령을 사용하여 git에게 openshift git repo의 master 브랜치를 로컬 git repo와 병합하도록 지시합니다. 재귀 적 병합 전략을 사용하여 병합하고 충돌이있을 때 자신의 버전을 선택하도록 지시합니다.

병합이 실행되면 git repo를 openshift로 푸시 할 준비가 된 것입니다. 다음을 수행하면됩니다.

git push openshift HEAD

git에게 "openshift"라는 원격 저장소의 HEAD 브랜치에 로컬 코드를 푸시하도록 지시합니다 (우리가 openshift git 저장소를 저장 한 별칭, 일부 단락은 더 위쪽에 있음).

btw. 몇 달 전에 openshift-java-client를 사용하는 방법을 보여주는 jboss 도구 블로그를 작성했습니다 : https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . 마지막 단락 "거의 완료되었습니다"에서 위 단계를 확인할 수 있습니다.


30
나는 이것이 여전히 질문에 대답하지 않는다고 생각합니다. 문제는 openshift의 git repo를 원격으로 사용하지 않고 대신 github의 repo (또는 해당 문제에 대한 bitbucket)를 git repo로 사용하는 것입니다. 공동 작업에 사용되는 github 저장소로 푸시하면 openshift에 반영되어야합니다. 나는 또한 같은 것을 찾고 있지만 답을 찾지 못했습니다. 나는 이것에 대한 솔루션을 얻는 경우에 나는 업데이트하려고합니다
마노 NV

9
openshift git repo를 사용할 수 없습니다. OpenShift 내의 git repo는 코드를 OpenShift에 넘겨주는 방법입니다. 대안이없고 "대신 github 사용"이 없습니다. 위에서 설명하려고했지만 OpenShift의 git repo는 github 사용에서 제외되지 않습니다. github / bitbucket / XX를 마스터 소스 제어 리포지토리로 사용하고 대부분의 사용자가이를 수행하는 경우 로컬 github / bitbucket / XX-clone에 원격으로 OpenShift git 리포지토리를 추가하기 만하면됩니다. OpenShift로 푸시하는 것은 OpenShift로 분리하는 것과 같습니다.
adietisheim

1
내가 이해한다면 openshift로 작업하면 개발 저장소 (예 : github)로 작업해야하고 배포하려면 openshift HEAD에 푸시하면됩니다.
Ricardo

1
-f 플래그와 git URL의 ssh 부분이 모두 필수적이라는 점에 주목할 가치가 있습니다.
Simon H

1
@adietisheim을 새 git 2.9와 함께 사용하면 --allow-unrelated-histories관련없는 기록을 병합하지 않도록 git 기본값이 변경 되었으므로 추가해야합니다 .
Alon Burg

23

나는 그 질문이 2 살이고 @adietisheim의 대답 이 받아 들여 졌다는 것을 알고 있습니다. 개인적으로 OpenShift 저장소를 공용 저장소의 마스터 브랜치에 혼합하고 싶지 않기 때문에 OpenShift 저장소를 로컬 복제본에 병합하고 싶지 않습니다.

을 사용하여 리모컨을 추가했다고 가정하면 다음과 git remote add openshift <openshift-git-repo-url>같이 할 수 있습니다.

분기를 openshift기반으로 새 로컬 분기를 만듭니다 master.

git checkout -b openshift

openshift앱 배포 구성과 같이 분기에서 일부 커밋을 수행 할 수 있습니다. 그런 다음 플래그 -f를 사용 하여 현재 분기를 OpenShift 저장소의 원격 참조 일치 마스터로 푸시 하여 원격 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

Pushing to two git remote origins from one repository and Changing git remote origin을 읽을 수 있습니다 .


git push backup master충분하면 refspec의 양쪽을 모두 지정할 필요가 없습니다.

1
2 git 원격으로 푸시하는 팁은 완벽합니다. 그런 다음 a : git push -u allto 'all'을 기본 리모컨으로 수행 할 수도 있습니다 . 할 때 git push, 그것은 이후에 2 개의 저장소로 푸시됩니다!
Akram Ben Aissi

5

@adietisheim의 대답에 동의합니다. openshift =)로 배포하기 전에 더 나은 자식을 이해해야합니다.

이제 git을 이해하더라도 디렉토리 구조가 openshift에 필요한 디렉토리 구조와 일치하지 않고 이전 디렉토리 구조를 유지하려는 경우 기존 저장소를 배포하는 방법이 반드시 명확하지는 않습니다.

이를 위해 다음과 같은 팁이 있습니다.

  • 다른 파일에없는 옵션과 배포 종속적 인 별도의 옵션. 예를 들어, 데이터베이스 설정을 다른 설정에서 다음과 같이 다른 파일로 분리합니다.

    • settings_deploy / openshift

    • settings_deploy / localhost

    그런 다음 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배포 저장소에 올바른 파일 만 유지합니다 .

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • 강제 푸시 :

      cd deploy_repo

      git push -f origin master

    • 배포 저장소를 정리합니다.

      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

그런 다음 위에 설명 된 단계를 사용하여 OpenShift 원격 Git 저장소를 로컬 Git 저장소에 병합합니다.


4

Mohannd의 대답은 완벽하지만 다른 사람이 필요할 경우를 대비하여 완전한 솔루션을 요약하고 싶습니다.

github 저장소를 Openshift 저장소로 사용하기위한 완벽한 솔루션은 없습니다. Openshfit은 git 후크를 사용하여 커밋을 기반으로 배포 또는 재배포를 트리거하기 때문입니다. 그러나 가장 현명한 방법은 2 개의 저장소 (openshift의 하나와 github의 하나)를 사용하여 코드를 동시에 푸시하는 것입니다.

이렇게하려면 : "all"이라는 원격을 추가하고 2 개의 푸시 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$

도움이 되었기를 바랍니다


오류가 있습니다. 여러 리포지토리를 가질 수 있지만 둘 다 "origin"이라는 이름을 지정할 수 없습니다. 다음과 같이 고유해야합니다. originorigin2
Eric P

이 구현을 사용했지만 No such remote 'openshift-git-repo'라는 오류가 발생했습니다. 위의 스크립트에 누락 된 부분이 있다고 생각합니다 ..
Arman Ortega


1

Openshift에 기존 코드 저장소를 배포하는 데 문제가 발생했습니다. 내가 tomcat 웹앱을 배포하려고했던 내 특정 상황에서 .openshift 폴더에 포함 된 Openshift tomcat 구성 파일이 중요했습니다.

나를 위해 고친 것은 기존 소스 트리에 .openshift 폴더를 포함하고 maven pom.xml 파일에 openshift 프로필을 포함하는 것입니다.

이는 리포지토리를 새로운 오픈 시프트 업스트림 리포지토리와 병합하여 발생할 가능성이 매우 높습니다. 저에게 이것은 adietisheim의 위대한 대답에서 다음 문장 뒤에있는 "왜"입니다.

"그런 다음 로컬 git 리포지토리에서 openshift로 코드를 푸시하려면 먼저 openshift 리포지토리를 로컬 bitbucket 복제본과 병합해야합니다."

제 경우에는 .openshift 디렉토리에서 구성 파일을 가져 오는 데이 병합이 필요했습니다. .openshift 디렉터리없이 푸시하면 여전히 앱을 성공적으로 빌드하고 배포 할 수 있었기 때문에 알아내는 데 오랜 시간이 걸렸습니다. 내가 본 유일한 동작은 누락 된 jsp 파일에 대한 보고서였습니다. 이로 인해 문제가 내 web.xml 및 서블릿 구성과 관련이 있다고 생각했습니다.



0

Java를 사용하는 경우 다른 접근 방식이 있습니다. 그러나이 접근 방식에서도 여전히 OpenShift git 저장소를 사용합니다. OpenShift에서 제공하는 git 저장소는 OpenShift에 배포 가능한 코드를 제공하는 방법입니다.

OpenShift git repo에 코드를 커밋하는 대신 전쟁 파일을 제공 할 수 있습니다. OpenShift git repo를 로컬 머신에 복제합니다. 그런 다음 애플리케이션 소스에서 전쟁을 빌드하고이 전쟁을 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.