2010-11-17 34 views
33

Tengo un servidor de compilación hudson. El código fuente es administrado por un repositorio git. Para cada compilación, se revisa y compila la última versión. Ahora me gustaría decirle a Hudson que no utilice la última versión, sino una versión anterior del código (especificada por mí).Usar Hudson para compilar un commit de git específico

En hudson tengo dos parámetros que se pueden establecer. Primer "nombre del repositorio", con el valor predeterminado "origen" y el segundo refspec con el valor +refs/heads/*:refs/remotes/origin/*. Intenté algo como origin/[commitid] o +refs/heads/*:refs/remotes/origin/[commitid]. Pero nada funcionó como se esperaba.

Creo que tuve que usar un trabajo parametrizado, de modo que puedo asignar la confirmación como parámetro al trabajo.

¿Cómo puedo decirle a hudson que use una confirmación específica en lugar de la última?

Respuesta

2

Puede configurar su trabajo Hudson para construir una rama específica. Luego puede presionar cualquier cambio que desee que Hudson cree en esa rama.

4

En "Pre pasos" intenta agregar "Ejecutar shell" y añade:

git pull 
    git checkout <commit version> 
+5

Nota: Esto significa que la variable de entorno GIT_COMMIT ya no coincide con la confirmación real que está desprotegida. – Karl

+0

Tiene razón, pero ya conoce la '' –

4

Una solución sería:

  • establecer el plug Git para construir un "build_br" rama especial .
  • restablecer la rama build_br a la espera comprometerse
  • empuje esa rama build_br al monitor de recompra a distancia por Jenkins o Hudson (que sería un push --force, como se ilustra en "git reset --hard and a remote repository")

De esa manera , construir esa rama build_br significaría construir una confirmación específica, y la GIT_COMMIT se establecerá correctamente.
No debe llevarse a cabo ningún desarrollo en esa rama especial, ya que se restablece periódicamente a cualquier confirmación que deba compilarse.

1

No estoy seguro acerca de Hudson, pero Jenkins 'Git Plugin tiene un botón "Avanzado ..." a la derecha justo arriba del campo "Navegador de repositorio". Al hacer clic allí, se muestran muchas opciones adicionales, una de ellas es "Pagar/fusionar a la sucursal local (opcional)". Su texto de ayuda dice "Si se da, revise la revisión para construir como HEAD en esta rama. Tenga en cuenta que esto no ha sido probado con submódulos", por lo que parece ser lo que tiene en mente.

8

Puede usar el parámetro de bifurcación del jenkins-git-plugin para definir un identificador de confirmación específico.

Jenkins solo realizará el pago y no el jefe de una sucursal.

+0

¿Cómo? Ejemplo, por favor, –

+3

Si hace clic en el pequeño signo de interrogación (?) Al lado del campo, dice: '... Se puede verificar una revisión específica especificando el hash SHA1 de esa revisión en este campo. Esto me parece como "forma correcta de hacerlo". – Ben

48

Solo quiero this answer more clear. Cómo hacer su trabajo para retirar una determinada confirmación, paso a paso: parámetro de cadena

  1. Agregar a su trabajo con el nombre, que sea COMMIT en mi ejemplo.
  2. Elija Git como SCM (proporcionado por Jenkins Git plugin).
  3. En las propiedades SCM de Git establezca sus propiedades de repositorio.
  4. En Git SCM, en el párrafo Sucursales para compilar tipo ${COMMIT} que es la referencia al parámetro de trabajo y se resolverá durante la compilación.

Eso es todo, inicie la construcción y en el registro verá algo como esto:

Cloning the remote Git repository 
Cloning repository ssh://your-repo.git 
Fetching upstream changes from ssh://your-repo.git 
using GIT_SSH to set credentials 
Fetching upstream changes from ssh://your-repo.git 
using GIT_SSH to set credentials 
Checking out Revision af63e2102b65953316e512c0bb659578bb143a33 (detached) 

Tenga en cuenta, que hay otras formas de establecer la variable de entorno antes de que el check out SMC, es decir, utilizando Prepare environment for the run paso del EnvInject Plugin (incluso puedes usar Groovy para esto).

Además, si no ve las opciones de las que estoy hablando o no funcionan, asegúrese de tener una nueva versión de un complemento de Git. En mi caso, es 2.2.0.

+0

Gracias por los pasos detallados. ¡Trabajado como un encanto! –

+0

¿Cómo se "inicia la compilación"? Cuando presiono "Crear ahora", solo se construye una rama (principal). – user239558

+0

Comprueba mi respuesta nuevamente, sugerí introducir un parámetro. Cuando se parametriza el trabajo, el usuario ve BuildWithParameters al presionar el enlace "Build" en lugar del inicio de compilación inmediato. – izzekil

3

Al igual que la documentación dice:

git plugin branch configure

Ingrese su Commit Identificación de las "ramas para construir" ajuste.