web-dev-qa-db-fra.com

Puis-je utiliser mon dépôt Git existant avec openshift?

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

Ou pour simplifier, je ne pousse que sur github, mais quand je veux me déployer, je fais quelque chose avec openshift?

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

100
Jigar Shah

J'ai l'impression que vous n'êtes pas encore habitué à utiliser git. Je vous conseillerais de vous familiariser avec git afin de bien comprendre comment pousser votre code vers openshift. Néanmoins, permettez-moi d’essayer de vous expliquer les étapes à suivre: Comme vous le feriez avec git en général, l’approche à choisir ici consiste à cloner votre autre rapport git (par exemple, sur bitbucket) sur votre machine locale: 

git clone <bitbucket-repo-url>

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

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

Pour pouvoir ensuite transmettre le code de votre dépôt git local à openshift, vous devez d’abord fusionner votre dépôt openshift avec votre clone de bitbucket local. Vous faites cela en émettant localement:

git merge openshift/master -s recursive -X ours

Avec cette commande, vous indiquez à git de fusionner la branche principale dans le dépôt git openshift avec votre dépôt 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 à envoyer votre dépôt Git en Open Shift. Vous faites cela en faisant:

git Push openshift HEAD

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

btw. J'ai écrit un blog sur jboss tools qui expliquait 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".

224
adietisheim

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

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

Créez une nouvelle branche locale openshift basée sur la branche master.

git checkout -b openshift

Vous pouvez effectuer des validations sur la branche openshift, telles que les configurations de déploiement de votre application . Ensuite, déplacez la branche actuelle vers le maître de correspondance des références distant dans le référentiel OpenShift avec l'indicateur -f pour tout écraser dans la branche master distante.

git Push openshift master -f

Chaque fois que je souhaite déployer mon application sur OpenShift, je vérifie la branche locale openshift et fusionne la branche master avec elle, puis force le Push vers OpenShift. Toutefois, -f peut ne pas être requis pour les prochains envois:

git checkout openshift
git merge --no-ff master
git Push openshift master -f
23
Sithu

À 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 Passer à deux origines distantes git à partir d'un même référentiel et Changer l'origine de Git distant .

6
Mohannd

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 savoir comment déployer votre référentiel 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:

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

    • settings_deploy/openshift

    • settings_deploy/localhost

    puis un lien symbolique vers votre test localhost sous la forme suivante:

    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 offrait une variable d'environnement OPENSHIFT_APP_NAME (peu probable pour celui-ci), la méthode était 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

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

    • liens durs tout de votre ancien local existant à leurs emplacements corrects à la 

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

      vous pourriez utiliser quelque chose comme:

      cp -lrf original_repo_dir deploy_repo_dir

    • conservez uniquement le fichier settings_deploy 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 repo de déploiement:

      git reset --hard HEAD

      git clean -df

pour ceux qui sont intéressés par le déploiement de Django, j'ai un exemple sur mon github , en particulier, consultez le script deploy.sh et le projet projects/elearn qu'il déploie.

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

Pour utiliser votre référentiel github en tant que référentiel Openshift, il n'y a pas de solution parfaite à présent, car Openshfit utilise des hooks git pour déclencher le déploiement ou le redéploiement en fonction de vos commits. Cependant, la solution la plus intelligente consiste à utiliser 2 dépôts (celui de openshift et celui de votre github) pour envoyer simultanément le code.

Pour ce faire: Ajoutez une télécommande nommée "all" et ajoutez-y 2 URLs 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

Puis 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 va pousser sur les 2 télécommandes et se déployer 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

4
Akram Ben Aissi

Vous devriez pouvoir transférer un référentiel Git existant dans le 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.

Dans un deuxième temps, vous pouvez ignorer la création du référentiel OpenSHift Git local via 

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

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

4
stefankolb

Si vous utilisez github, vous pouvez configurer travis pour effectuer le déploiement à chaque fois que vous modifiez votre référentiel github.

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

1
alexzm1

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 a été résolu pour moi, c’est l’inclusion du dossier .openshift dans l’arborescence source existante, ainsi que l’inclusion du profil openshift dans mon fichier maven pom.xml.

Il est fort probable que ce soit la même chose qui se produirait en fusionnant votre référentiel avec le nouveau registre openshift en amont. Pour moi, c'est le "pourquoi" de la phrase suivante de l'adietisheim:

"Pour pouvoir ensuite transmettre le code de votre dépôt git local à openshift, vous devez d’abord fusionner votre dépôt openshift avec votre clone de bitbucket local."

Dans mon cas, cette fusion était nécessaire pour obtenir les fichiers de configuration à partir du répertoire .openshift. Il a fallu beaucoup de temps à comprendre, car pousser sans le répertoire .openshift a quand même permis à mon application de se créer et de se déployer avec succès. Le seul comportement que j'ai observé était un rapport sur les fichiers jsp manquants, ce qui m'a amené à penser que le problème était lié à ma propre configuration web.xml et à ma servlet.

1
Bram Luyten

Il existe un moyen de faire ce que vous voulez, c'est-à-dire ignorer le dépôt de Openshift . Ce que vous devez faire, c'est configurer un jenkins et le faire interroger votre propre référentiel.

Il y a un lien ici qui explique comment le configurer à partir de rien: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html

1
Axel

PRENEZ FACILE!

étape 1: Créer une application. Avec votre méthode préférée (de gitRepository, du pré-constructeur Openshift, etc.) si vous utilisez la console metod 
étape 2: rhc git-clone nameApp  
étape 3: rhc app-configure nameApp --auto-deploy 
étape 4: PROFITEZ!

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 explique comment vous donnez à OpenShift votre code, votre ou vos déployables:

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

0
adietisheim