Могу ли я использовать существующее репозиторий git с openshift?


102

Нужно ли иметь репозиторий git только на openshift? У меня уже есть репозиторий bitbucket / github git, и я бы предпочел нажимать только туда. Могу я просто подключиться к нему, чтобы openshift получил представление?

Или для упрощения нажимаю только на github, а когда хочу развернуть, что-то делаю с openshift?

Я проверил это, но меня это смутило: речь идет о слиянии выхода и нового (openshift) git?


6
Не могли бы вы вычитать вопрос? Это очень сложно понять.
Мэтт Фенвик,

Ответы:


226

У меня такое впечатление, что вы еще не привыкли достаточно использовать git. Я бы посоветовал вам заглянуть в git, чтобы полностью понять, как подтолкнуть ваш код к openshift. Тем не менее, позвольте мне попытаться объяснить вам необходимые шаги: Как и в случае с git в целом, здесь можно выбрать подход к клонированию другого репозитория git (например, на bitbucket) на локальный компьютер:

git clone <bitbucket-repo-url>

Ваш локальный клон имеет другое ваше репо (битбакет и т. Д.) В качестве удаленного репо. Ваше удаленное репо хранится с псевдонимом origin (псевдоним по умолчанию, используемый git при клонировании). Затем вы добавляете репозиторий openshift как удаленный к своему клону. Вы делаете это, явно используя псевдоним для добавляемого удаленного репо - здесь я использую "openshift" в качестве псевдонима:

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

Чтобы затем иметь возможность протолкнуть код из локального репозитория git в openshift, вам сначала нужно объединить репозиторий openshift с вашим локальным клоном битбакета. Это можно сделать, выполнив локально:

git merge openshift/master -s recursive -X ours

С помощью этой команды вы указываете git объединить главную ветку в репозитории git openshift с вашим локальным репозиторием git. Вы говорите ему выполнить слияние, используя стратегию рекурсивного слияния, и выбрать свою («нашу») версию при возникновении конфликтов.

После выполнения слияния вы готовы отправить репозиторий git в openshift. Вы делаете это, делая:

git push openshift HEAD

Вы говорите git, чтобы он протолкнул ваш локальный код в ветвь HEAD удаленного репозитория под названием «openshift» (псевдоним, в котором мы сохранили репозиторий openshift git, в нескольких абзацах выше).

кстати. Несколько месяцев назад я написал блог об инструментах jboss, в котором демонстрировал, как использовать openshift-java-client: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Вы заметите вышеуказанные шаги в последнем абзаце «Мы почти закончили».


30
Думаю, это все еще не дает ответа на вопрос. Вопрос в том, чтобы не использовать репозиторий git openshift в качестве удаленного, а вместо этого использовать репо на github (или bitbucket, если на то пошло) в качестве репозитория git. Репозиторий push на github, используемый для совместной работы, также должен обеспечить его отражение в openshift. Я тоже ищу то же самое, но не нашел ответа. Я постараюсь обновить, если у меня будет решение для этого
Manoj NV

9
Вы не можете не использовать репозиторий git openshift. Репозиторий git в OpenShift - это то, как вы передаете OpenShift свой код. Альтернативы нет, нет «вместо этого использовать github». Как я пытался обрисовать выше, репозиторий git в OpenShift не исключает вас от использования github. Если вы используете github / bitbucket / XX в качестве основного репозитория системы управления версиями - и большинство пользователей это сделают - тогда вы просто добавите репозиторий OpenShift git как удаленный в свой локальный github / bitbucket / XX-clone. В этом случае переход на OpenShift эквивалентен переходу на OpenShift.
adietisheim

1
Если я понимаю, если я работаю с openshift, я должен работать с репозиторием для разработки (например, github), и если я хочу его развернуть, просто нажмите на openshift HEAD, riht?
Ricardo

1
Стоит отметить, что флаг -f и ssh-часть URL-адреса git необходимы
Саймон Х

1
@adietisheim с новым git 2.9 вам нужно будет добавить --allow-unrelated-histories как git default был изменен, чтобы не разрешать слияние несвязанных историй.
Алон Бург

23

Я знаю, что этому вопросу 2 года, и ответ @adietisheim был принят. Мне лично не нравится объединять репозиторий openshift с моим локальным клоном, потому что я не хочу смешивать репо OpenShift с основной веткой моего публичного репо.

Предполагая, что вы добавили пульт 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 из одного репозитория» и « Изменение удаленного источника git» .


git push backup masterдостаточно, вам не нужно указывать обе стороны refspec.

1
Совет по нажатию на 2 git remote идеален. Затем вы также можете выполнить git push -u allкоманду : to 'all' для пульта дистанционного управления по умолчанию. При этом git pushон впоследствии будет перемещен в 2 репозитория!
Акрам Бен Аисси

5

Я согласен с ответом @adietisheim: вам нужно лучше понять git перед развертыванием с помощью 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

а затем выполните описанные выше действия, чтобы объединить удаленный репозиторий Git OpenShift с вашим локальным репозиторием Git.


4

Ответ Моханда идеален, но я хотел бы резюмировать полное решение на случай, если оно понадобится кому-то еще:

Чтобы использовать репозиторий github в качестве репозитория Openshift, сейчас нет идеального решения, потому что Openshfit использует git-хуки для запуска развертывания или повторного развертывания на основе ваших коммитов. Однако самым разумным способом было бы использовать 2 репозитория (один openshift и ваш github) для одновременной отправки кода в.

Для этого: Добавьте пульт с именем «all» и добавьте к нему 2 push-адреса.

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 в качестве пульта push по умолчанию:

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. Они должны быть уникальными, например: origin и origin2
Eric P

используя эту реализацию, но я получил ошибку, которая говорит: Нет такого удаленного 'openshift-git-repo' .. я думаю, что в приведенном выше скрипте отсутствует ...
Арман Ортега

2

Есть способ делать то, что вы хотите, например, пропустить репозиторий Openshift. Что вам нужно сделать, так это настроить jenkins и попросить его опросить ваш собственный репозиторий.

Здесь есть ссылка, объясняющая, как настроить его с нуля: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html


1

Я столкнулся с проблемами при развертывании уже существующего репозитория кода в Openshift. В моем конкретном контексте, когда я пытался развернуть веб-приложение tomcat, решающее значение имели файлы конфигурации Openshift tomcat, включенные в папку .openshift.

Для меня это исправило включение папки .openshift в мое существующее дерево исходных текстов, а также включение профиля openshift в мой файл maven pom.xml.

Скорее всего, это то же самое, что и при слиянии вашего репозитория с новым исходным openshift. Для меня это «почему», стоящее за следующим предложением великого ответа Адитисхайма:

«Чтобы затем иметь возможность протолкнуть код из локального репозитория git в openshift, вы сначала должны объединить репозиторий openshift с локальным клоном битбакета».

В моем случае это слияние было необходимо для получения файлов конфигурации из каталога .openshift. Мне потребовалось много времени, чтобы разобраться, потому что при нажатии без каталога .openshift мое приложение по-прежнему собиралось и развертывалось успешно. Единственное, что я видел, это отчет об отсутствующих файлах jsp, который заставил меня подумать, что проблема связана с моим собственным web.xml и конфигурацией сервлета.



0

Если вы используете java, есть альтернативный подход. Но даже при таком подходе вы все равно будете использовать репозиторий OpenShift git. Репозиторий git, предоставляемый OpenShift, - это то, как вы предоставляете OpenShift свой код, ваши развертываемые объекты:

Вы можете - вместо того, чтобы передавать свой код в репозиторий OpenShift git, - просто передать ему свой военный файл. Вы клонируете репозиторий OpenShift git на свой локальный компьютер. Затем вы создаете войну из своего источника приложения и помещаете эту войну в папку развертывания в вашем репозитории OpenShift git (клон). Затем вы добавляете, фиксируете и отправляете локальный клон в OpenShift. После успешного выполнения пуша JBoss AS7 выберет вашу войну и развернет ее.


0

ПРОСТО!

Шаг 1: Создайте приложение. Вашим любимым методом (из gitRepository, pre-maker Openshift и т. Д.). если вы используете метод консоли,
шаг 2: rhc git-clone nameApp
шаг 3: rhc app-configure nameApp --auto-deploy
шаг 4: НАСЛАЖДАЙТЕСЬ!


Это нормально, но это был не ответ на вопрос :)
Янош Винселлер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.