¿Puedo usar mi repositorio de git existente con openshift?

102

¿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)?

Jigar Shah
fuente
6
¿Podrías revisar la pregunta? Es muy dificil de entender.
Matt Fenwick

Respuestas:

226

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".

Adietisheim
fuente
30
Creo que esto todavía no responde a la pregunta. La pregunta es sobre no usar el repositorio de git de openshift como el control remoto, sino usar el repositorio en github (o bitbucket para el caso) como el repositorio de git. Un impulso al repositorio de github utilizado para colaborar también debería garantizar que se refleje en openshift. También estoy buscando lo mismo pero no he encontrado la respuesta. Intentaré actualizar si obtengo una solución para esto
Manoj NV
9
No puede no usar el repositorio de git de openshift. El repositorio de git dentro de OpenShift es cómo entregas tu código a OpenShift. No hay alternativa, no hay "usar github en su lugar". Como traté de describir anteriormente, el repositorio de git en OpenShift no lo excluye de usar github. Si usa github / bitbucket / XX como su repositorio principal de control de fuente, y la mayoría de los usuarios lo harán, entonces simplemente agregaría el repositorio git de OpenShift como remoto a su github / bitbucket / XX-clone local. Empujar a OpenShift es equivalente a pasar a OpenShift.
Adietisheim
1
Si lo entiendo, si trabajo con openshift, debería trabajar con un repositorio de desarrollo (por ejemplo, github) y si quiero implementarlo, simplemente presione openshift HEAD, ¿verdad?
Ricardo
1
Vale la pena señalar que la bandera -f y la parte ssh de la URL de git son esenciales
Simon H
1
@adietisheim con el nuevo git 2.9 deberá agregarlo --allow-unrelated-historiesya que git default ha cambiado para no permitir la fusión de historias no relacionadas.
Alon Burg
23

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 openshiftbasada en la mastersucursal.

git checkout -b openshift

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 -fpara sobrescribir todo en la masterrama remota .

git push openshift master -f

Siempre que quiera implementar mi aplicación en OpenShift, verifico la openshiftrama local y fusionaré la masterrama con ella, luego forzaré el empuje a OpenShift, sin embargo, es -fposible que no sea necesario para los siguientes empujes:

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

Desde su carpeta de proyecto, haga

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

Puede leer Enviar a dos orígenes remotos de git desde un repositorio y Cambiar el origen remoto de git .

Mohannd
fuente
git push backup masteres suficiente, no es necesario especificar ambos lados de refspec.
1
El consejo para empujar a 2 git remote es perfecto. También puede hacer un: git push -u allto 'all' al control remoto predeterminado. ¡Al hacerlo git push, posteriormente se enviará a los 2 repositorios!
Akram Ben Aissi
5

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:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Otra opción es detectar el host mediante variables de entorno:

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

    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_NAMEvariable 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_deployarchivo 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.shscript y el proyecto projects/elearnque implementa.

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

Debería poder pasar un repositorio de Git existente a la canalización de activos a través de

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

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

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

y luego use los pasos descritos anteriormente para fusionar el repositorio Git remoto de OpenShift en su repositorio Git local.

Stefankolb
fuente
4

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.

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

Luego configure el control remoto llamado 'todos' como el control remoto push predeterminado:

git push -u all

Para confirmar y enviar su código, proceda como de costumbre: presionará los 2 controles remotos y se implementará en OpenShift

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

Y mira el resultado:

[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$

Espero que esto ayude

Akram Ben Aissi
fuente
Tienes un error. Puede tener varios repositorios, pero ambos no pueden llamarse "origen". Deben ser únicos, como: origen y origen2
Eric P
usando esta implementación, pero tengo un error que dice No hay tal control remoto 'openshift-git-repo' .. creo que falta algo en el script anterior ..
Arman Ortega
1

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.

Bram Luyten
fuente
0

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á.

Adietisheim
fuente
0

¡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!

Patricio Joaquín Labarca Guzma
fuente
Está bien, pero esa no fue la respuesta a la pregunta :)
Janos Vinceller