programing

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

nasanasas 2020. 8. 17. 09:07
반응형

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


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

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

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


나는 당신이 아직 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 . 마지막 단락 "거의 완료되었습니다"에서 위 단계를 확인할 수 있습니다.


나는 그 질문이 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

프로젝트 폴더에서

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을 읽을 수 있습니다 .


@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 템플릿을 복제

  • 다음과 같은 배포 스크립트를 만듭니다.

    • hardlinks everything from your old existing local to their correct locations at the

      hardlinks are fast to create and use very little memory

      you could use something like:

      cp -lrf original_repo_dir deploy_repo_dir

    • keep only the correct settings_deploy file in the deploy repo:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • force push:

      cd deploy_repo

      git push -f origin master

    • clean the deploy repo:

      git reset --hard HEAD

      git clean -df

for those interested in django deployment, I have an example on my github, in particular check out the deploy.sh script and the project projects/elearn which it deploys.


You should be able to pass in an existing Git repository into the asset pipeline via

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

The remote Git repository then delivers the initial application for OpenShift.

As a second possibility, you can skip the creation of the local OpenSHift Git repository via

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

and then use the steps described above to merge the OpenShift remote Git repository into your local Git repository.


Mohannd's answer is perfect, but I would like to sum up the complete solution, in case some else needs it:

To use your github repo as an Openshift repo, there is no perfect solution now, because, Openshfit uses git hooks to trigger the deployment or redeployment based on your commits. However, the smartest way would be to use 2 repos (the openshift's one and your github's one) to push simultaneously the code to.

To do this: Add a remote named "all" and add 2 push urls to it.

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

Then set the remote named 'all' as the default push remote:

git push -u all

To commit and push your code, proceed as usual: It will push on the 2 remotes and deploy on OpenShift

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

And watch the result:

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

Hope this helps


There is a way to do what you want, i.e. skip Openshift's repo. What you need to do is set up a jenkins, and have it poll your own repository.

There's a link here that explains how to set it up from scratch: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html


I ran into problems deploying a pre-existing code repository to Openshift. In my particular context, where I tried to deploy a tomcat webapp, the Openshift tomcat configuration files included in the .openshift folder were crucial.

What fixed it for me was the inclusion of the .openshift folder in my existing source tree, as well as the inclusion of the openshift profile in my maven pom.xml file.

This is highly likely the same that would happen by merging your repository with the new openshift upstream one. For me, this is the "why" behind following sentence in adietisheim's great answer:

"In order to then be able to push the code from your local git repo to openshift you first have to merge your openshift repo with your local bitbucket clone."

In my case, this merge was needed to get the config files from the .openshift directory. It took a long time to figure out for me because pushing without the .openshift directory still made my app build and deploy successfully. The only behaviour I saw was a report on missing jsp files, which made me think that the problem was related to my own web.xml and servlet configuration.


If you're using github you can configure travis to made the deployment each time you made a change in your github repository

http://docs.travis-ci.com/user/deployment/openshift/


If you are using java then there's is an alternative approach. But even in this approach you would still use the OpenShift git repository. The git repository provided by OpenShift is how you give OpenShift your code, your deployable(s):

You can - instead of committing your code to the OpenShift git repo - simply give it your war-file. You clone the OpenShift git repo to your local machine. You then build a war from your application source and put this war into the deployments folder within your OpenShift git repo (clone). You then add, commit and push your local clone to OpenShift. Once the push executed successfully, the JBoss AS7 will pick your war and deploy it.


TAKE EASY!

step 1: Create app. With your favorite method (from gitRepository, pre-maker Openshift, etc). if you use console metod
step 2: rhc git-clone nameApp
step 3: rhc app-configure nameApp --auto-deploy
step 4: ENJOY!

참고URL : https://stackoverflow.com/questions/12657168/can-i-use-my-existing-git-repo-with-openshift

반응형