Ejecute el script de Shell después de la compilación posterior en Jenkins

81

Estoy tratando de ejecutar un script de shell si la compilación pasa o falla después de la compilación en Jenkins. No puedo ver esta opción en la compilación posterior para ejecutar algún script de shell, excepto para ejecutar un objetivo.

topgun
fuente

Respuestas:

67

Se hace muy fácilmente con el complemento de tareas de creación de publicaciones .

Jenkins: opción "Publicar tarea de compilación"

Daniel Magnusson
fuente
48
En su lugar, recomendaría el complemento PostBuildScript para simplemente ejecutar un script. Es más simple y robusto si no necesita condicionar la salida del registro. Por ejemplo, permite ejecutar cualquier paso de compilación en las acciones posteriores a la compilación.
Sampo
9
También tenga en cuenta que el complemento Post Build Task coloca toda la salida de la consola en la memoria para hacer la prueba condicional ... que puede ocupar mucha memoria si tiene cientos de trabajos que producen una gran cantidad de resultados ... Nuestro maestro jenkins acaba de fallar debido a este complemento ...
grayaii
1
El complemento PostBuildScript se ha suspendido.
Abierto el
@Upen, ¿puede proporcionar un enlace que demuestre eso?
Vadim Kotov
10

También puede ejecutar comandos arbitrarios utilizando Groovy Post Build , y eso le dará mucho control sobre cuándo se ejecutan, etc. Usamos eso para ejecutar un script de shell de 'dedo de la culpa' en el caso de compilaciones fallidas o inestables.

if (manager.build.result.isWorseThan(hudson.model.Result.SUCCESS)) {
  item = hudson.model.Hudson.instance.getItem("PROJECTNAMEHERE")
  lastStableBuild = item.getLastStableBuild()
  lastStableDate = lastStableBuild.getTime()
  formattedLastStableDate = lastStableDate.format("MM/dd/yyyy h:mm:ss a")
  now = new Date()
  formattedNow = now.format("MM/dd/yyyy h:mm:ss a")
  command = ['/appframe/jenkins/appframework/fob.ksh', "${formattedLastStableDate}", "${formattedNow}"]
  manager.listener.logger.println "FOB Command: ${command}"
  manager.listener.logger.println command.execute().text
}

(Nuestro comando toma la última fecha de compilación estable y la hora actual como parámetros para que pueda investigar quién pudo haber roto la compilación, pero podría ejecutar los comandos que desee de manera similar)

crovers
fuente
6

Si estoy leyendo bien su pregunta, desea ejecutar un script en la parte de acciones posteriores a la compilación de la compilación.

Yo mismo uso el complemento PostBuildScript para ejecutarlo git clean -fxddespués de que la compilación haya archivado los artefactos y publicado los resultados de las pruebas. Mis esclavos Jenkins tienen discos SSD, por lo que no tengo la sala para mantener los archivos generados en el espacio de trabajo.

sti
fuente
3

Debería poder hacerlo con el complemento Batch Task .

  1. Cree una tarea por lotes en el proyecto.
  2. Agrega una opción de post-construcción "Invocar tareas por lotes" seleccionando el mismo proyecto.

Una alternativa también puede ser el complemento de tareas de publicación .

Carlo Bonamico
fuente
1

Tendría que configurar el script de shell posterior a la compilación como un trabajo de Jenkins separado y activarlo como un paso posterior a la compilación. Parece que necesitará utilizar el complemento de activación parametrizado, ya que la opción estándar "Crear otros proyectos" solo funciona si la generación de activación es correcta.

gareth_bowles
fuente
¿Cómo puedo activar el script si la compilación falla exclusivamente en función del script de shell ejecutable que tengo en mis tareas de trabajo? Gracias
topgun
Pensando en esto, podría ser más fácil de controlar en el propio script de compilación. ¿Qué marco de construcción estás usando?
gareth_bowles