Pregunta

Me estoy moviendo mis pruebas continua a un servidor dedicado (ralentiza autotest por mi portátil locales demasiado). Lo que me gustaría es para mi servidor de prueba (que pasa a estar en ejecución CruiseControl.rb) estar recibiendo continuamente mi último (comprometido) cambia a través de Git - idealmente, sin ningún cambio en mi propio flujo de trabajo. Soy el único desarrollador trabajando en este proyecto.

Antes de obtener el servidor de prueba, que tenía:

  • Mi portátil como mi sistema principal de desarrollo
  • ramas múltiples en mi repositorio local.
  • Una copia de trabajo local, apuntando a una de las ramas. Cambio entre las ramas con frecuencia (por lo general para las nuevas características).
  • Una cuenta de GitHub, a la que con frecuencia empujar ramas locales a sucursales remotas de espejo. (Esto es para usarla una copia de seguridad fuera del sitio, no estoy compartiendo ningún código para mi proyecto actual). Trato de empujar a GitHub al menos al final de cada día de trabajo, aunque en ocasiones olvido.

Me gustaría mantener todo eso intacta. Además de eso, ahora tengo:

  • El servidor de prueba
  • ... corriendo CruiseControl.rb
  • Un clon de mi repositorio portátil en mi servidor de prueba. (En la actualidad no es la clonación de GitHub)
  • Una copia de trabajo local en el servidor de prueba, de la que CC es la construcción / prueba.
  • Esta copia de trabajo apunta a una rama Git en particular (por supuesto)

He estado tratando de tener mi servidor de prueba consigo automáticamente cualquier rama que estoy trabajando en mi portátil de copia y la acumulación de trabajo de eso. (Eso haría la prueba continua de autotest imitan sin consumir recursos del sistema).

Las cosas que he intentado sin éxito:

  • origen git checkout / HEAD:. Esto se pone el archivos bien, pero se rompe climatizador porque no le gusta el "sucursales" copia de trabajo
  • git checkout -b --track a_branch origen / a_branch: esta bien trabaja para obtener archivos, y CC le gusta, pero se pega el servidor de prueba a una rama particular. Al cambiar de ramas en la computadora portátil Voy a parar efectivamente probar mi trabajo actual.
  • git checkout -b --track my_testing_branch origen / HEAD: esto también recibe archivos edificables, pero adolece de los mismos problemas que el comando anterior. La creación de una rama de origen / HEAD sólo se pone la CABEZA de la sucursal "default", por lo que también es pegajosa.

¿Hay alguna manera de obtener una buena distancia del sistema de pruebas continuas (con o sin ramas GIT) que no implica grandes cambios en mi flujo de trabajo?

¿Fue útil?

Solución

Otra opción es escribir un gancho que notifica al servidor de prueba del nuevo código de tirón . En particular, un gancho post-commit es probablemente una ruta mejor. Entonces, cada vez que cometen puede informar al servidor de prueba de lo que debe de tracción y de qué rama.

Otros consejos

Se podría tener una rama de pruebas dedicado en el que se fusionan su trabajo rama actual.
Puede forzar la sustitución del contenido de esa rama con la confirmación de la rama de trabajo actual (ver nuestra git merge -s, lo de “su” cuestión ).

A continuación, en el servidor de CI, se inicializa con:

 $ git fetch laptopRepo
 $ git checkout -b testingBranch laptopRepo/testingBranch

Esto implica un primer paso en el lado del ordenador portátil para publicar algún trabajo actual a prueba.

Esta no es la mejor solución, pero es algo ...

El servidor de prueba se puede ejecutar git remote show origin para ver qué rama está actualmente activa en su computadora portátil. Por ejemplo,

$ git remote show origin
* remote origin
  Fetch URL: blade:/var/scratch/code
  Push  URL: blade:/var/scratch/code
  HEAD branch: foo
  Remote branches:
    foo tracked
    bar tracked
    qux tracked

Por lo tanto, el repositorio de origen se encuentra actualmente en la rama foo.

No he visto un comando de bajo nivel que le dará que directa por lo que puede que tenga que analizarlo a partir de esta (tal vez alguien tendrá una mejor manera). Ejemplo,

$ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}')
$ echo $b
foo

Ahora, ya origin/foo actuará similar a origin/HEAD (ninguna rama local) y el climatizador no le gusta que se debe probablemente sólo crear una rama local en la máquina de ensayo y simplemente difícil restablecerla a la última ubicación:

$ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}')
$ git reset --hard origin/$b

Tenga en cuenta, esto es ligeramente frágil desde HEAD mí no siempre sea lo que usted piensa que es. Por ejemplo, durante una HEAD rebase se mueve hacia atrás y hacia adelante. Si sus cheques servidor de prueba HEAD en su ordenador portátil durante una rebase podría conseguir algo de ubicación no válida o no deseada.

He piense consiguió una muy buena solución invirtiendo la relación entre los dos sistemas. En lugar de tener el tirón servidor de prueba desde el repositorio de la computadora portátil, que podría tener el empuje portátil cambia a cabo en el servidor para ser probado.

En primer lugar me añadir un mando a distancia en la cesión temporal del portátil:

git remote add testing <url of testing server>

A continuación, cada vez que tengo el código para las pruebas, debo hacer un esfuerzo:

git push -f testing HEAD:master

Esto funcionará de cualquier rama que estoy actualmente. Las asegura -f que voy a soplar a lo que ya está en la rama; No voy a tener que preocuparse por los antepasados.

Esto en realidad no poner el código más reciente de una copia de trabajo, pero el sondeo del climatizador puede resolver eso. También podría tener un gancho del lado del servidor que actualiza una copia de trabajo y se ejecuta el conjunto de pruebas (ni siquiera necesitaría CC en ese momento).

Probablemente querrá agregar un combinado cometer + comando push a un script o alias; que me dará mi un mandato de confirmación y prueba. Si por alguna razón que quiero hacer un compromiso sin un impulso de prueba (o viceversa), entonces no tengo esas opciones también.

Host en GitHub y usar su post-Recieve ganchos . Así es como los servicios como Devver y RunCodeRun hacerlo.

he considerado saltarse git pasado y va a un / NFS / rsync solución carpeta compartida, pero que tiene un gran problema: no se desencadena por / limitado a confirmaciones, así que voy a terminar encima de conseguir roto falsos positivos construye mientras estoy en el medio de escribir algo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top