Mostrar el estado actual de la compilación de Jenkins en el repositorio de GitHub


182

¿Hay alguna manera de mostrar el estado de compilación de Jenkins en GitHub Readme.md de mi proyecto?

Uso Jenkins para ejecutar compilaciones de integración continua. Después de cada confirmación, se asegura de que todo se compila, así como ejecuta pruebas unitarias y de integración, antes de finalmente producir documentación y lanzar paquetes.

Todavía existe el riesgo de cometer inadvertidamente algo que rompe la compilación. Sería bueno para los usuarios que visiten la página del proyecto GitHub saber que el maestro actual está en ese estado.


9
¿Por qué se rechazó esto? ¿Hay algo obvio en la guía del usuario de Jenkins que me perdí? Hice google de antemano, y no pude encontrar nada.
Jasper Blues

1
El servidor de compilación de Travis puede hacer algo como esto, pero estoy usando Jenkins en Osx. Este es el tipo de cosas que busco: github.com/CocoaPods/CocoaPods
Jasper Blues


2
El enlace a la pregunta similar recomienda Travis, que actualmente no es compatible con iOS y OSX, por lo que no responde la pregunta.
Jasper Blues

44
Esto no es un duplicado ... travis! =
Jenkins

Respuestas:


167

Ok, así es como puedes configurar Jenkins para configurar los estados de compilación de GitHub. Esto supone que ya tienes a Jenkins con el complemento GitHub configurado para hacer compilaciones en cada inserción.

  1. Vaya a GitHub, inicie sesión, vaya a Configuración , tokens de acceso personal , haga clic en Generar nuevo token .

    captura de pantalla de la configuración de GitHub

  2. Verifique el repositorio: estado (no estoy seguro de que esto sea necesario, pero lo hice y funcionó para mí).

    captura de pantalla de la generación de tokens GitHub

  3. Genere el token, cópielo.

  4. Asegúrese de que el usuario de GitHub que va a utilizar sea un colaborador de repositorio (para repositorios privados) o sea miembro de un equipo con acceso push y pull (para repositorios de la organización) a los repositorios que desea construir.

  5. Vaya a su servidor Jenkins, inicie sesión.

  6. Gestionar JenkinsConfigurar sistema
  7. En GitHub Web Hook, seleccione Permitir que Jenkins administre automáticamente las URL de enlace , luego especifique su nombre de usuario de GitHub y el token OAuth que obtuvo en el paso 3.

    captura de pantalla de la configuración global de Jenkins

  8. Verifique que funcione con el botón Probar credencial . Guarda la configuración.

  9. Encuentre el trabajo de Jenkins y agregue Establecer estado de compilación en GitHub commit a los pasos posteriores a la compilación

    captura de pantalla de la configuración de trabajo de Jenkins

Eso es. Ahora haga una compilación de prueba y vaya al repositorio de GitHub para ver si funcionó. Haga clic en Ramas en la página principal del repositorio para ver los estados de compilación.

captura de pantalla de la página principal donde hace clic en 'sucursales'

Debería ver marcas de verificación verdes:

captura de pantalla de sucursales de GitHub con estado de compilación


GitHub ha actualizado su flujo de trabajo de autorización ahora, los usuarios ya no especifican qué permitir, más bien las aplicaciones deben solicitar lo que requieren durante la autorización y el usuario aprueba los permisos solicitados.
Ian Vaughan

66
Esto no parece funcionar con Jenkins> 1.609 y el complemento de Github v 1.13.3 - No puedo encontrar la opción "Permitir que Jenkins administre automáticamente las URL de
enlace

2
Estoy de acuerdo con @pyeleven. Estoy usando Jenkins LTS 1.625.3 con Github Plugin 1.16.0 y Github API Plugin 1.71. Esta opción no aparece. Por el contrario, veo un menú desplegable para las credenciales, pero no se enumeran credenciales (aunque tengo credenciales configuradas). Estas credenciales aparecen al ir a Avanzar-> Administrar acciones adicionales de Github -> Convertir inicio de sesión y contraseña a token Github.
shehzan

44
Esto parece estar desactualizado; la acción posterior a la compilación que menciona esta respuesta ahora está marcada como obsoleta y hay una segunda
Daenyth el

1
Ahora los parámetros del paso posterior a la compilación han cambiado. @Alex tiene la respuesta correcta.
Bibek Mantree

51

Mientras tanto, la interfaz de usuario de Jenkins y GitHub ha cambiado un poco y me llevó un tiempo descubrir cómo configurar Jenkins ahora correctamente. La explicación aquí se basa en la versión 2.121.1 de Jenkins.

También supongo que ya ha configurado su trabajo de Jenkins para que lo active un webhook o una encuesta. Esos son los pasos que he tomado para que funcione:

  1. Configure Github: cree un token de acceso personal con OAuth Scope repo:status
  2. Configure Jenkins: Configure Systemy agregue el OAuth Secret como un servidor GitHub : úselo Secret Textcomo un método de autenticación para poner el OAuth Secret allí.
  3. Configure su trabajo de Jenkins: Agregar Set GitHub commit statuscomo acción posterior a la compilación . Establezca el resultado del estado en One of the default messages and statuses.
  4. Verifique su resultado en GitHub: verifique si obtiene el estado de compilación y la duración de la ejecución de compilación en su confirmación de GitHub.

Configurar Github

Crear token de acceso personal


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


Configurar Jenkins

ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


Configurar el trabajo de Jenkins

ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí


Resultado

Ahora verá el estado de sus confirmaciones y ramas:

ingrese la descripción de la imagen aquí


2
Wow finalmente encontró una solución, ¡muchas gracias! Ese "texto secreto" me confundió.
head01

Jenkins parece estar presionando estados, pero mi repositorio privado no los está detectando. ¿Alguna sugerencia?
Patrick Michaelsen el

Actualización: mi problema estaba relacionado con la privacidad de mi repositorio. Debo tener un problema con mi configuración de credenciales.
Patrick Michaelsen el

Actualización: finalmente descubrí que esto solo funciona si fue desencadenado por un impulso real de git. Ejecutar la compilación usted mismo no activa la actualización de estado correctamente.
Patrick Michaelsen el

1
El Manage Hookscuadro está resaltado pero no está marcado en las imágenes de arriba, ¿eso significa que no debería estar marcado cuando guardamos?
Perplexabot

37

Lo que hice es bastante simple:

  1. Instale el plugin Hudson Post Task
  2. Cree un token de acceso personal aquí: https://github.com/settings/tokens
  3. Agregue un complemento de tareas de publicación que siempre sea exitoso

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. Agregue un complemento de tarea posterior que pondrá la falla si "se marcó compilación como falla"

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. También puede agregar una llamada a pendiente al comienzo de las pruebas

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

Captura de pantalla de la configuración de la tarea Publicar compilación


También puede hacerlo de la tubería - por ejemplo, sólo puede llamar a través she incluso aprovechar el almacenamiento de credenciales con JenkinswithCredentials
Ivan Kolmychek


24

Este complemento debería funcionar: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Debería poder insertar insignias como esta en su README.mdarchivo:

construir pasar


66
Lamentablemente, parece que GitHub comenzó a almacenar en caché estas imágenes en algún servicio de alojamiento de imágenes, y ahora se muestran incorrectamente.
axel22

Ahora funciona bien si ha configurado correctamente el acceso (el usuario anónimo debería poder ver el estado de la compilación)
Dmitry Meshkov

11

La API de estado de confirmación le permite ver la " API de estados de repositorio ".

Y desde el 26 de abril de 2013, ahora puede ver el estado de compilación en su página de sucursal de repositorio de GitHub :

estado de compilación en sucursales de repositorio de GitHub

Eso significa que es otra forma, visitando la página del proyecto GitHub, para ver esos estados en lugar de tener solo Jenkins.

A partir del 30 de abril de 2013, el punto final de API para los estados de confirmación se ha ampliado para permitir nombres de sucursales y etiquetas, así como SHA de confirmación .


¿Dónde pongo las URL para golpear? ¿Hay un complemento o tengo que usar rizos de usuario en un paso de compilación?
Ian Vaughan

@IanVaughan, ¿qué quieres decir con "golpear"? ¿Ver qué? Para ver un estado, sería un curl( developer.github.com/v3/repos/statuses/… )
VonC

Lo siento, sí, sabía que se podía usar curl, y conocía la interfaz API, era más sobre dónde colocar el curl, y si no estaba disponible una abstracción de mayor nivel de curl. es decir, podría agregar un POST curl antes de que la compilación comience a indicar que el commit / PR se está compilando, y luego uno después, pero todo esto parece de muy bajo nivel, y esperaba que hubiera un complemento de nivel superior para hacer todo esto para mí.
Ian Vaughan

Desde entonces he encontrado que Janky, que es bastante pesado para mi caso de uso, parece hacer lo que quiero.
Ian Vaughan


7

Si tiene un Githubcomplemento instalado en su Jenkins, puede hacerlo de la Post build actionssiguiente manera:

establecer el estado de compilación en github



44
Esta respuesta carece de detalles: ¿cómo creo un token de acceso OAuth en GitHub para permitir que el complemento de GitHub use las API necesarias para establecer el estado de compilación? ¿Qué permisos se necesitan en este token? ¿En qué parte de la configuración de Jenkins puedo especificar el nombre de usuario / token?
Marius Gedminas

2
Esto realmente no es útil, ¿cómo llegas a esta ventana de diálogo?
Oz123

5

Agregue la línea siguiente en su archivo README.md y cambie ambas URL de acuerdo con su proyecto jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

¿El gráfico se carga automáticamente? Parece que no es para mí ...
HX_unbanned

Sí, no funcionará. Tienes que actualizar tu página.
Kaushal

3

En lo que respecta a la configuración de la rama protegida de Jenkins y GitHub. Estoy usando Jenkins 2.6, y estos son los pasos que hice para que funcione:

En la página web de GitHub de su repositorio:

  1. Vaya a Configuración> Ramas.
  2. En Proteger ramas, haga clic en el menú Elegir una rama ahogada y seleccione la rama que desea establecer como una rama protegida.
  3. Habilite las opciones según sea necesario.

En el servidor Jenkins: (asegúrese de tener instalado el complemento Git y GitHub)

  1. Vaya a Administrar Jenkins> Configurar sistema.
  2. En GitHub, establezca la URL de la API en https://api.github.com . Aunque este es el valor predeterminado.
  3. Seleccione su token generado para las Credenciales. Si aún no ha generado un token, haga clic en Avanzado ... luego en Acciones adicionales, puede convertir su nombre de usuario y contraseña en token y usarlo como su credencial.

Además, asegúrese de que la cuenta de GitHub que utiliza su Jenkins sea un colaborador para el repositorio. Lo configuré con el nivel de permiso de escritura.

Espero que esto ayude.




1

Editar:

Ya no estoy usando este enfoque, use una de las otras respuestas.

Actualización: lo que terminé haciendo, para nuestro caso específico: (las respuestas anteriores fueron geniales, ¡gracias!)

Debido a que nuestro servidor de compilación no está en Internet, tenemos un script para publicar el estado de compilación en la rama gh-pages en github.

  • Comienzo de los sellos de construcción que fallan
  • Fin del éxito de los sellos de compilación
  • El proyecto se ejecuta después del proyecto principal para publicar resultados -> estado de compilación, documentos API, informes de prueba y cobertura de prueba.

GitHub almacena en caché las imágenes, por lo que creamos el archivo .htaccess, que indica un breve tiempo de espera de caché para la imagen de estado de compilación.

Ponga esto en el directorio con la imagen de estado de compilación:

ExpiresByType image/png "access plus 2 minutes"

Aquí está el script de compilación. El objetivo que publica en gh-pages es '--publish.site.dry.run'

Con menos de 400 líneas de configuración, tenemos:

  • Compilar cheques
  • pruebas unitarias y de integración
  • Informes de las pruebas
  • Informes de cobertura de código
  • Documentos de API
  • Publicando en Github

. . y este script se puede ejecutar dentro o fuera de Jenkins, de modo que:

  • Los desarrolladores pueden ejecutar este script antes de la confirmación, lo que reduce la posibilidad de una compilación rota que afecte a otros.
  • Una falla es fácil de reproducir localmente.

Los resultados:

La página principal del proyecto tiene el estado de compilación, actualizado después de cada compilación, junto con los últimos documentos de API, resultados de prueba y cobertura de prueba.


Gran respuesta, más precisa que mi respuesta. +1
VonC

1
Enlace de escritura de la estructura está muerto
Saikat

¿Tienes un enlace en vivo a tu guión?
Ian

Dejé de usar este enfoque; creo que las otras respuestas serán mejores.
Jasper Blues
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.