¿Es necesario tener git repo solo en openshift? Ya tengo bitbucket / github git repo y preferiría presionar solo allí. ¿Puedo simplemente engancharme para que el cambio abierto se sienta bien?
O para simplificar, presiono solo en github, pero cuando quiero implementar, ¿hago algo con openshift?
Verifiqué esto, pero me confundió: ¿se trata de fusionar git saliente y nuevo (openshift)?
Respuestas:
Tengo la impresión de que todavía no estás acostumbrado a usar git lo suficiente. Te aconsejo que entres en git para comprender completamente cómo enviar tu código a openshift. Sin embargo, déjeme intentar explicarle los pasos involucrados: como lo haría con git en general, el enfoque a elegir aquí es clonar su otro repositorio de git (por ejemplo, en bitbucket) en su máquina local:
git clone <bitbucket-repo-url>
Su clon local tiene entonces su otro repositorio (bitbucket, etc.) como repositorio remoto. Su repositorio remoto se almacena con el alias "origen" (el alias predeterminado utilizado por git si clona). Luego agrega el repositorio de openshift como remoto a su clon. Lo hace mientras usa explícitamente un alias para el repositorio remoto que agrega; estoy usando "openshift" como alias aquí:
git remote add openshift -f <openshift-git-repo-url>
Para luego poder enviar el código de su repositorio de git local a openshift, primero debe fusionar su repositorio de openshift con su clon de bitbucket local. Lo haces emitiendo localmente:
git merge openshift/master -s recursive -X ours
Con este comando, le dice a git que combine la rama maestra en el repositorio de git de openshift con su repositorio de git local. Le dice que se fusione utilizando la estrategia de fusión recursiva y que elija su versión ("la nuestra") cuando haya conflictos.
Una vez que se ejecuta la fusión, está listo para enviar su repositorio de git a openshift. Lo haces haciendo:
git push openshift HEAD
Dile a git que envíe su código local a la rama HEAD en el repositorio remoto llamado "openshift" (el alias en el que almacenamos el repositorio de openshift git, algunos párrafos más arriba).
por cierto. Escribí un blog de herramientas jboss que demostraba cómo usar openshift-java-client hace algunos meses: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Verá los pasos anteriores en el último párrafo "Ya casi llegamos".
fuente
--allow-unrelated-histories
ya que git default ha cambiado para no permitir la fusión de historias no relacionadas.Sé que la pregunta tiene 2 años y la respuesta de @ adietisheim ha sido aceptada. Personalmente, no me gusta fusionar el repositorio de OpenShift en mi clon local porque no quiero mezclar el repositorio de OpenShift en la rama maestra de mi repositorio público.
Suponiendo que haya agregado el uso remoto
git remote add openshift <openshift-git-repo-url>
, esto es lo que haría:Cree una nueva sucursal local
openshift
basada en lamaster
sucursal.Puede realizar algunas confirmaciones en la rama
openshift
, como las configuraciones de implementación de su aplicación. Luego, empuje la rama actual al maestro de coincidencia de referencias remotas en el repositorio de OpenShift con la marca-f
para sobrescribir todo en lamaster
rama remota .Siempre que quiera implementar mi aplicación en OpenShift, verifico la
openshift
rama local y fusionaré lamaster
rama con ella, luego forzaré el empuje a OpenShift, sin embargo, es-f
posible que no sea necesario para los siguientes empujes:fuente
Desde su carpeta de proyecto, haga
Puede leer Enviar a dos orígenes remotos de git desde un repositorio y Cambiar el origen remoto de git .
fuente
git push backup master
es suficiente, no es necesario especificar ambos lados de refspec.git push -u all
to 'all' al control remoto predeterminado. ¡Al hacerlogit push
, posteriormente se enviará a los 2 repositorios!Estoy de acuerdo con la respuesta de @ adietisheim: debes comprender mejor git antes de implementar con openshift =)
Ahora, incluso si comprende git, no es necesariamente obvio cómo implementar su repositorio existente si su estructura de directorio no coincide con la estructura de directorio requerida por openshift, y si desea mantener su estructura de directorio anterior.
Para eso, tengo los siguientes consejos:
separe las opciones que dependen de la implementación de las que no están en archivos diferentes. Por ejemplo, separo la configuración de mi base de datos de otras configuraciones en diferentes archivos como:
settings_deploy / openshift
settings_deploy / localhost
y luego enlace simbólico a su prueba localhost como algo como:
Otra opción es detectar el host mediante variables de entorno:
Esto es un poco más simple ya que le permite poner todas las configuraciones en un solo archivo. Es un poco menos general, ya que si alguna vez otro de sus hosts ofrece una
OPENSHIFT_APP_NAME
variable de entorno (poco probable para este), el método se rompe. De todos modos, aún debe separar claramente lo que depende de la implementación y lo que no.crear un directorio de implementación local
clonar la plantilla inicial de openshift en ella
crear un script de implementación que:
enlaza todo, desde su antiguo local existente a sus ubicaciones correctas en el
Los enlaces duros son rápidos de crear y usan muy poca memoria.
podrías usar algo como:
cp -lrf original_repo_dir deploy_repo_dir
mantenga solo el
settings_deploy
archivo correcto en el repositorio de implementación:cd deploy_repo
mv settings_deploy/openshift settings_deploy_file
rm -r settings_deploy
empuje de fuerza:
cd deploy_repo
git push -f origin master
limpiar el repositorio de implementación:
git reset --hard HEAD
git clean -df
para aquellos interesados en la implementación de django, tengo un ejemplo en mi github , en particular, consulte el
deploy.sh
script y el proyectoprojects/elearn
que implementa.fuente
Debería poder pasar un repositorio de Git existente a la canalización de activos a través de
El repositorio remoto de Git luego entrega la aplicación inicial para OpenShift.
Como segunda posibilidad, puede omitir la creación del repositorio local de OpenSHift Git a través de
y luego use los pasos descritos anteriormente para fusionar el repositorio Git remoto de OpenShift en su repositorio Git local.
fuente
La respuesta de Mohannd es perfecta, pero me gustaría resumir la solución completa, en caso de que alguien más la necesite:
Para usar su repositorio de github como repositorio de Openshift, no existe una solución perfecta ahora, porque Openshfit usa ganchos de git para activar la implementación o la reimplementación en función de sus confirmaciones. Sin embargo, la forma más inteligente sería usar 2 repositorios (el de openshift y el de tu github) para enviar simultáneamente el código a.
Para hacer esto: agregue un control remoto llamado "todos" y agregue 2 URL push a él.
Luego configure el control remoto llamado 'todos' como el control remoto push predeterminado:
Para confirmar y enviar su código, proceda como de costumbre: presionará los 2 controles remotos y se implementará en OpenShift
Y mira el resultado:
Espero que esto ayude
fuente
Hay una manera de hacer lo que quieras, es decir, saltarte el repositorio de Openshift. Lo que debe hacer es configurar un jenkins y hacer que sondee su propio repositorio.
Aquí hay un enlace que explica cómo configurarlo desde cero: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html
fuente
Tuve problemas para implementar un repositorio de código preexistente en Openshift. En mi contexto particular, donde traté de implementar una aplicación web de tomcat, los archivos de configuración de tomcat de Openshift incluidos en la carpeta .openshift fueron cruciales.
Lo que me solucionó fue la inclusión de la carpeta .openshift en mi árbol de fuentes existente, así como la inclusión del perfil openshift en mi archivo maven pom.xml.
Esto es muy probable que suceda al fusionar su repositorio con el nuevo openhift upstream. Para mí, este es el "por qué" detrás de la siguiente oración en la gran respuesta de adietisheim:
"Para poder enviar el código de su repositorio de git local a openshift, primero debe fusionar su repositorio de openshift con su clon de bitbucket local".
En mi caso, esta combinación fue necesaria para obtener los archivos de configuración del directorio .openshift. Me tomó mucho tiempo darme cuenta porque presionar sin el directorio .openshift hizo que mi aplicación se compilara e implementara correctamente. El único comportamiento que vi fue un informe sobre archivos jsp faltantes, lo que me hizo pensar que el problema estaba relacionado con mi propia configuración web.xml y servlet.
fuente
Si está utilizando github, puede configurar travis para realizar la implementación cada vez que realiza un cambio en su repositorio de github
http://docs.travis-ci.com/user/deployment/openshift/
fuente
Si está utilizando Java, existe un enfoque alternativo. Pero incluso en este enfoque, seguiría usando el repositorio git de OpenShift. El repositorio de git proporcionado por OpenShift es cómo le da a OpenShift su código, sus implementables:
Puede, en lugar de enviar su código al repositorio git de OpenShift, simplemente darle su archivo war. Clona el repositorio git de OpenShift en su máquina local. Luego, crea una guerra desde el origen de su aplicación y coloca esta guerra en la carpeta de implementaciones dentro de su repositorio git de OpenShift (clon). Luego agrega, confirma y envía su clon local a OpenShift. Una vez que el empuje se ejecutó correctamente, JBoss AS7 seleccionará su guerra y la desplegará.
fuente
¡TOMAR FÁCIL!
paso 1: crea la aplicación. Con su método favorito (de gitRepository, pre-maker Openshift, etc.). si usa el método de consola
paso 2:
rhc git-clone nameApp
paso 3:
rhc app-configure nameApp --auto-deploy
paso 4: ¡DISFRUTE!
fuente