Puis-je utiliser mon référentiel git existant avec OpenShift?

102

Est-il nécessaire d'avoir git repo uniquement sur OpenShift? J'ai déjà bitbucket / github git repo et je préférerais y pousser uniquement. Puis-je simplement m'y accrocher pour que l'openshift soit informé?

Ou pour simplifier, je pousse uniquement sur github, mais quand je veux déployer, je fais quelque chose avec OpenShift?

J'ai vérifié cela mais cela m'a dérouté: il s'agit de fusionner la sortie et le nouveau git (openshift)?

Jigar Shah
la source
6
Pourriez-vous relire la question? C'est très difficile à comprendre.
Matt Fenwick

Réponses:

226

J'ai l'impression que vous n'êtes pas encore assez habitué à utiliser git. Je vous conseillerais d'entrer dans git pour bien comprendre comment pousser votre code en openshift. Néanmoins, laissez-moi essayer de vous expliquer les étapes impliquées: comme vous le feriez avec git en général, l'approche à choisir ici est de cloner votre autre dépôt git (ex. Sur bitbucket) sur votre machine locale:

git clone <bitbucket-repo-url>

Votre clone local a alors votre autre dépôt (bitbucket, etc.) comme dépôt distant. Votre dépôt distant est stocké avec l'alias "origin" (l'alias par défaut utilisé par git si vous clonez). Vous ajoutez ensuite le référentiel openshift en tant que distant à votre clone. Vous faites cela en utilisant explicitement un alias pour le référentiel distant que vous ajoutez - j'utilise «openshift» comme alias ici:

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

Afin de pouvoir ensuite pousser le code de votre dépôt git local vers openshift, vous devez d'abord fusionner votre dépôt openshift avec votre clone bitbucket local. Vous faites cela en émettant localement:

git merge openshift/master -s recursive -X ours

Avec cette commande, vous dites à git de fusionner la branche master dans le repo openshift git avec votre repo git local. Vous lui dites de fusionner en utilisant la stratégie de fusion récursive et de choisir votre version ("la nôtre") en cas de conflit.

Une fois la fusion exécutée, vous êtes prêt à pousser votre dépôt git vers openshift. Vous faites cela en faisant:

git push openshift HEAD

Vous dites à git de pousser votre code local dans la branche HEAD du référentiel distant appelé "openshift" (l'alias sur lequel nous avons stocké le repo openshift git, quelques paragraphes plus haut).

btw. J'ai écrit un blog sur les outils jboss qui montrait comment utiliser le client openshift-java il y a quelques mois: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Vous remarquerez les étapes ci-dessus dans le dernier paragraphe "Nous y sommes presque".

Adietisheim
la source
30
Je pense que cela ne répond toujours pas à la question. La question est de ne pas utiliser le repo git d'OpenShift comme distant, mais plutôt d'utiliser le repo sur github (ou bitbucket d'ailleurs) comme repo git. Un push to github repo utilisé pour la collaboration devrait également garantir qu'il se reflète dans OpenShift. Je cherche également la même chose mais je n'ai pas trouvé de réponse. J'essaierai de mettre à jour si j'obtiens une solution pour cela
Manoj NV
9
Vous ne pouvez pas ne pas utiliser le repo openshift git. Le dépôt git dans OpenShift est la façon dont vous transmettez votre code à OpenShift. Il n'y a pas d'alternative, il n'y a pas "d'utiliser github à la place". Comme j'ai essayé de le décrire ci-dessus, le dépôt git sur OpenShift ne vous empêche pas d'utiliser github. Si vous utilisez github / bitbucket / XX comme référentiel de contrôle de source principal - et la plupart des utilisateurs le feront -, alors vous ajouteriez simplement le référentiel OpenShift git en tant que distant à votre github / bitbucket / XX-clone local. Pousser vers OpenShift équivaut alors à se déployer vers OpenShift.
adietisheim
1
Si je comprends bien, si je travaille avec openshift, je devrais travailler avec un dépôt de développement (par exemple github) et si je veux le déployer, appuyez simplement sur openshift HEAD, riht?
Ricardo
1
Il convient de noter que l'indicateur -f et la partie ssh de l'URL git sont tous deux essentiels
Simon H
1
@adietisheim avec le nouveau git 2.9 que vous devrez ajouter --allow-unrelated-historiescar git default a changé pour ne pas autoriser la fusion d'histoires non liées.
Alon Burg
23

Je sais que la question date de 2 ans et que la réponse de @ adietisheim a été acceptée. Personnellement, je n'aime pas fusionner le repo openshift dans mon clone local car je ne veux pas mélanger le repo OpenShift dans la branche principale de mon repo public.

En supposant que vous ayez ajouté la télécommande à l'aide git remote add openshift <openshift-git-repo-url>, voici ce que je ferais:

Créez une nouvelle branche locale openshiftbasée sur la masterbranche.

git checkout -b openshift

Vous pouvez effectuer des validations sur la branche, openshifttelles que les configurations de déploiement de votre application. Ensuite, poussez la branche actuelle vers le maître de correspondance de référence distant dans le référentiel OpenShift avec l'indicateur -fpour écraser tout dans la masterbranche distante .

git push openshift master -f

Chaque fois que je souhaite déployer mon application sur OpenShift, je vérifie la openshiftbranche locale et fusionne la masterbranche avec elle, puis force le push vers OpenShift, mais -fpeut ne pas être nécessaire pour les prochaines poussées:

git checkout openshift
git merge --no-ff master
git push openshift master -f
Sithu
la source
6

À partir de votre dossier de projet, faites

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

Vous pouvez lire Pousser vers deux origines distantes git à partir d'un référentiel et Changer l'origine distante git .

Mohannd
la source
git push backup masterest suffisant, vous n'avez pas besoin de spécifier les deux côtés de la refspec.
1
L'astuce pour pousser vers 2 git remote est parfaite. Vous pouvez également faire un: git push -u allto 'all' sur la télécommande par défaut. Ce faisant git push, il poussera ensuite vers les 2 dépôts!
Akram Ben Aissi
5

Je suis d'accord avec la réponse de @ adietisheim: vous devez mieux comprendre git avant de déployer avec openshift =)

Maintenant, même si vous comprenez git, il n'est pas nécessairement évident de déployer votre dépôt existant si votre structure de répertoires ne correspond pas à la structure de répertoires requise par openshift et si vous souhaitez conserver votre ancienne structure de répertoires.

Pour cela, j'ai les conseils suivants:

  • des options distinctes qui dépendent du déploiement de celles qui ne sont pas dans des fichiers différents. Par exemple, je sépare les paramètres de ma base de données des autres paramètres dans différents fichiers comme:

    • settings_deploy / openshift

    • settings_deploy / localhost

    puis un lien symbolique vers votre test localhost comme quelque chose comme:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Une autre option consiste à détecter l'hôte à l'aide de variables d'environnement:

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

    C'est un peu plus simple car cela vous permet de mettre toutes les configurations sur un seul fichier. C'est un peu moins général, car si jamais un autre de vos hôtes propose une OPENSHIFT_APP_NAMEvariable d'environnement (peu probable pour celui-ci), la méthode est interrompue. Quoi qu'il en soit, vous devez toujours séparer clairement ce qui dépend du déploiement et ce qui ne l'est pas.

  • créer un répertoire de déploiement local

  • cloner le modèle OpenShift initial dedans

  • créer un script de déploiement qui:

    • relie tout depuis votre ancien local existant à leurs emplacements corrects au

      les liens physiques sont rapides à créer et utilisent très peu de mémoire

      vous pouvez utiliser quelque chose comme:

      cp -lrf original_repo_dir deploy_repo_dir

    • ne conserver que le settings_deployfichier correct dans le référentiel de déploiement:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • force de poussée:

      cd deploy_repo

      git push -f origin master

    • nettoyer le référentiel de déploiement:

      git reset --hard HEAD

      git clean -df

pour ceux qui s'intéressent au déploiement de django, j'ai un exemple sur mon github , en particulier consultez le deploy.shscript et le projet projects/elearnqu'il déploie.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
4

Vous devriez pouvoir transmettre un référentiel Git existant au pipeline d'actifs via

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

Le référentiel Git distant fournit ensuite l'application initiale pour OpenShift.

Comme deuxième possibilité, vous pouvez ignorer la création du dépôt local OpenSHift Git via

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

puis utilisez les étapes décrites ci-dessus pour fusionner le référentiel Git distant d'OpenShift dans votre référentiel Git local.

stefankolb
la source
4

La réponse de Mohannd est parfaite, mais j'aimerais résumer la solution complète, au cas où quelqu'un d'autre en aurait besoin:

Pour utiliser votre dépôt github comme un dépôt OpenShift, il n'y a pas de solution parfaite pour le moment, car OpenShfit utilise des hooks git pour déclencher le déploiement ou le redéploiement en fonction de vos commits. Cependant, le moyen le plus intelligent serait d'utiliser 2 dépôts (celui de l'openshift et celui de votre github) pour pousser simultanément le code.

Pour ce faire: Ajoutez une télécommande nommée «all» et ajoutez-y 2 URL push.

git remote add all ssh://[email protected]/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://[email protected]/~/git/yourapp.git
git remote set-url github-repo --push --add [email protected]:youruser/yourapp.git

Ensuite, définissez la télécommande nommée `` all '' comme télécommande push par défaut:

git push -u all

Pour valider et pousser votre code, procédez comme d'habitude: il poussera sur les 2 télécommandes et se déploiera sur OpenShift

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

Et regardez le résultat:

[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 [email protected]: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://[email protected]/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

J'espère que cela t'aides

Akram Ben Aissi
la source
Vous avez une erreur. Vous pouvez avoir plusieurs référentiels, mais ils ne peuvent pas tous les deux être nommés "origine". Ils doivent être uniques, comme: origine et origine2
Eric P
en utilisant cette implémentation mais j'ai eu une erreur qui dit Pas de telle télécommande 'openshift-git-repo' .. je pense qu'il manque un script ci-dessus ..
Arman Ortega
1

J'ai rencontré des problèmes lors du déploiement d'un référentiel de code préexistant sur OpenShift. Dans mon contexte particulier, où j'ai essayé de déployer une application web tomcat, les fichiers de configuration OpenShift tomcat inclus dans le dossier .openshift étaient cruciaux.

Ce qui m'a corrigé, c'est l'inclusion du dossier .openshift dans mon arborescence source existante, ainsi que l'inclusion du profil openshift dans mon fichier maven pom.xml.

C'est très probablement la même chose que celle qui se produirait en fusionnant votre référentiel avec le nouveau open en amont. Pour moi, c'est le «pourquoi» derrière la phrase suivante dans la grande réponse d'Adietisheim:

"Afin de pouvoir ensuite pousser le code de votre dépôt git local vers openshift, vous devez d'abord fusionner votre dépôt openshift avec votre clone bitbucket local."

Dans mon cas, cette fusion était nécessaire pour obtenir les fichiers de configuration du répertoire .openshift. J'ai mis du temps à comprendre, car pousser sans le répertoire .openshift permettait toujours à mon application de se construire et de se déployer avec succès. Le seul comportement que j'ai vu était un rapport sur les fichiers jsp manquants, ce qui m'a fait penser que le problème était lié à ma propre configuration web.xml et servlet.

Bram Luyten
la source
0

Si vous utilisez java, il existe une approche alternative. Mais même dans cette approche, vous utiliseriez toujours le référentiel OpenShift git. Le référentiel git fourni par OpenShift est la façon dont vous donnez à OpenShift votre code, votre (vos) déployable (s):

Vous pouvez - au lieu de valider votre code dans le référentiel OpenShift git - simplement lui donner votre fichier war. Vous clonez le dépôt OpenShift git sur votre machine locale. Vous créez ensuite une guerre à partir de la source de votre application et placez cette guerre dans le dossier de déploiements de votre dépôt OpenShift git (clone). Vous ajoutez, validez et poussez ensuite votre clone local vers OpenShift. Une fois la poussée exécutée avec succès, le JBoss AS7 choisira votre guerre et la déploiera.

Adietisheim
la source
0

PRENEZ FACILE!

Étape 1: Créez une application. Avec votre méthode préférée (depuis gitRepository, le pré-fabricant OpenShift, etc.). si vous utilisez la console metod
étape 2: rhc git-clone nameApp
étape 3: rhc app-configure nameApp --auto-deploy
étape 4: ENJOY!

Patricio Joaquin Labarca Guzma
la source
C'est bien, mais ce n'était tout simplement pas la réponse à la question :)
Janos Vinceller