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)?
Réponses:
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".
la source
--allow-unrelated-histories
car git default a changé pour ne pas autoriser la fusion d'histoires non liées.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
openshift
basée sur lamaster
branche.Vous pouvez effectuer des validations sur la branche,
openshift
telles 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-f
pour écraser tout dans lamaster
branche distante .Chaque fois que je souhaite déployer mon application sur OpenShift, je vérifie la
openshift
branche locale et fusionne lamaster
branche avec elle, puis force le push vers OpenShift, mais-f
peut ne pas être nécessaire pour les prochaines poussées:la source
À partir de votre dossier de projet, faites
Vous pouvez lire Pousser vers deux origines distantes git à partir d'un référentiel et Changer l'origine distante git .
la source
git push backup master
est suffisant, vous n'avez pas besoin de spécifier les deux côtés de la refspec.git push -u all
to 'all' sur la télécommande par défaut. Ce faisantgit push
, il poussera ensuite vers les 2 dépôts!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:
Une autre option consiste à détecter l'hôte à l'aide de variables d'environnement:
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_NAME
variable 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_deploy
fichier 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.sh
script et le projetprojects/elearn
qu'il déploie.la source
Vous devriez pouvoir transmettre un référentiel Git existant au pipeline d'actifs via
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
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.
la source
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.
Ensuite, définissez la télécommande nommée `` all '' comme télécommande push par défaut:
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
Et regardez le résultat:
J'espère que cela t'aides
la source
Il existe un moyen de faire ce que vous voulez, c'est-à-dire ignorer le dépôt OpenShift. Ce que vous devez faire est de configurer un jenkins et de le faire interroger votre propre référentiel.
Il y a un lien ici qui explique comment le configurer à partir de zéro: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html
la source
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.
la source
Si vous utilisez github, vous pouvez configurer travis pour effectuer le déploiement à chaque fois que vous apportez une modification à votre référentiel github
http://docs.travis-ci.com/user/deployment/openshift/
la source
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.
la source
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!
la source