2012-06-20 15 views
12

Me gustaría tener un gancho post-build o similar, para que pueda tener el mismo resultado que e. gramo. el complemento de IRC, pero déjelo en un script. Pude obtener toda la información, excepto el estado de compilación real. Esto simplemente no funciona, ni como un "script posterior a la construcción", "tarea posterior a la construcción", "disparador parametrizado", etc.Obtener el estado de compilación en el script post-build

Es posible que con algunas soluciones muy feas, pero quería preguntar, en caso de que alguien tiene una opción más agradable ... menos de escribir mi propio complemento.

Respuesta

7

Utilice la secuencia de comandos Groovy en el paso posterior a la compilación a través de Groovy Post-Build plugin. A continuación, puede acceder a las partes internas de Jenkins a través del Jenkins Java API. El complemento proporciona el script con la variable manager que se puede usar para acceder a partes importantes de la API (consulte la sección Uso en la documentación del complemento).

Por ejemplo, aquí es cómo se puede ejecutar un simple script de Python externa en Windows y salida de su resultado (así como el resultado de la acumulación) para construir la consola:

def command = """cmd /c python -c "for i in range(1,5): print i" """ 
manager.listener.logger.println command.execute().text 

def result = manager.build.result 
manager.listener.logger.println "And the result is: ${result}" 
+0

Gracias, eso suena muy bien. ¿Es posible llamar a una herramienta externa, como un script, desde allí? – smlgbl

+0

Actualizó la respuesta. –

+0

Parece que funciona, pero la salida del comando no se imprime. – smlgbl

7

Funciona como se ha mencionado con el maravilloso mensaje -Complemento de compilación, pero sin ningún presupuesto adicional dentro de la cadena que se ejecuta. Así que tuve que poner la funcionalidad real en un script de shell, que hace una llamada a curl, que a su vez necesita cotización para los parámetros de POST.

def result = manager.build.result 
def build_number = manager.build.number 
def env = manager.build.getEnvironment(manager.listener) 
def build_url = env['BUILD_URL'] 
def build_branch = env['SVN_BRANCH'] 
def short_branch = (build_branch =~ /branches\//).replaceFirst("") 
def host = env['NODE_NAME'] 
def svn_rev = env['SVN_REVISION'] 
def job_name = manager.build.project.getName() 


"/usr/local/bin/skypeStagingNotify.sh Deployed ${short_branch} on ${host} - ${result} - ${build_url}".execute() 
+0

Si hay un error en un comando de shell, no se imprime nada. Para imprimir eso, consulte https://stackoverflow.com/questions/159148/groovy-executing-shell-commands –

+0

Además, para ejecutar cadenas que contengan comillas/espacios en Groovy, es mejor usar este https: // stackoverflow. com/a/788401/1000551 –

1

Trate Post Build Task plug-in ...

Se le permite especificar las condiciones en base a la salida del registro ...

2

Por esta me gusta mucho el Conditional Build Step plugin. Es muy flexible y puede elegir qué acciones tomar en función de la falla o el éxito de la compilación. Por ejemplo, aquí hay un caso en el que utilizo paso de generación condicional para enviar una notificación en caso de fallo de construcción:

enter image description here

También puede utilizar paso de generación condicional para establecer una variable de entorno o escribir en un archivo de registro que se utiliza en los siguientes pasos de "ejecutar shell". Por ejemplo, puede crear una compilación con tres pasos: un paso para compilar código/ejecutar pruebas, otro para establecer una variable de entorno STATUS="failed" y luego un tercer paso que envía un correo electrónico como The build finished with a status: ${STATUS}

2

Solución realmente fácil, tal vez no es elegante, pero funciona!

1: Captura todos los resultados de compilación que quieras capturar (en este caso ÉXITO).

2: Inyectar una variable de entorno valorada con el estado del trabajo

Step 1

3: hacer lo mismo para cualquier tipo de cualquier otra condición (en este caso cojo de abortar a inestable)

enter image description here

4: Después podrás usar el valor para lo que quieras hacer ... ¡en este caso lo paso a una secuencia de comandos ANT! (O puede cargarlo directamente desde ANT como variable de entorno ...)

enter image description here

esperan que los pueda ayudar!

Cuestiones relacionadas