sirven que puedes populares poner película los hashtags hacer google funcionan como agregar adulto above hudson jenkins

que - Cómo obtener una lista de archivos modificados desde la última compilación en Jenkins/Hudson



sirven los hashtags en youtube (10)

Configuré Jenkins, pero me gustaría saber qué archivos se agregaron / cambiaron entre la compilación actual y la compilación anterior. Me gustaría ejecutar algunas pruebas de larga duración dependiendo de si ciertas partes del árbol fuente se cambiaron o no.

Después de haber buscado en Internet, no puedo encontrar ninguna mención de esta habilidad dentro de Hudson / Jenkins, aunque se hicieron sugerencias para usar los ganchos post-commit de SVN. Tal vez es tan simple que todos (excepto yo) saben cómo hacerlo.

es posible?


A través de Groovy:

<!-- CHANGE SET --> <% changeSet = build.changeSet if (changeSet != null) { hadChanges = false %> <h2>Changes</h2> <ul> <% changeSet.each { cs -> hadChanges = true aUser = cs.author %> <li>Commit <b>${cs.revision}</b> by <b><%= aUser != null ? aUser.displayName : it.author.displayName %>:</b> (${cs.msg}) <ul> <% cs.affectedFiles.each { %> <li class="change-${it.editType.name}"><b>${it.editType.name}</b>: ${it.path} </li> <% } %> </ul> </li> <% } if (!hadChanges) { %> <li>No Changes !!</li> <% } %> </ul> <% } %>


Con las tuberías de Jenkins (pipeline que admite APIs plugin 2.2 o superior), esta solución funciona para mí:

def changeLogSets = currentBuild.changeSets for (int i = 0; i < changeLogSets.size(); i++) { def entries = changeLogSets[i].items for (int j = 0; j < entries.length; j++) { def entry = entries[j] def files = new ArrayList(entry.affectedFiles) for (int k = 0; k < files.size(); k++) { def file = files[k] println file.path } } }

Consulte Cómo acceder a los registros de cambios en un trabajo de canalización .


El servidor de CI le mostrará la lista de cambios, si está buscando cambios y está utilizando la actualización de SVN. Sin embargo, parece que desea cambiar el comportamiento de la construcción en función de qué archivos se modificaron. No creo que exista una forma inmediata de hacerlo con Jenkins solo.

Un enlace post-commit es una idea razonable. Puede parametrizar el trabajo y hacer que su script hook abra la compilación con el valor del parámetro establecido de acuerdo con los cambios confirmados. No estoy seguro de lo difícil que puede ser para ti.

Sin embargo, es posible que desee considerar dividir esto en dos trabajos separados, uno que se ejecute en cada confirmación y otro diferente para las pruebas de larga duración que no siempre necesite. Personalmente, prefiero mantener un comportamiento laboral consistente entre las ejecuciones. De lo contrario, la trazabilidad sufre.


Es simple, pero esto funciona para mí:

$DirectoryA = "D:/Jenkins/jobs/projectName/builds" ####Jenkind directory $firstfolder = Get-ChildItem -Path $DirectoryA | Where-Object {$_.PSIsContainer} | Sort-Object LastWriteTime -Descending | Select-Object -First 1 $DirectoryB = $DirectoryA + "/" + $firstfolder $sVnLoGfIle = $DirectoryB + "/" + "changelog.xml" write-host $sVnLoGfIle


Lo he hecho de la siguiente manera. No estoy seguro si ese es el camino correcto, pero parece estar funcionando. Debe instalar el complemento Jenkins Groovy y realizar la siguiente secuencia de comandos.

import hudson.model.*; import hudson.util.*; import hudson.scm.*; import hudson.plugins.accurev.* def thr = Thread.currentThread(); def build = thr?.executable; def changeSet= build.getChangeSet(); changeSet.getItems();

ChangeSet.getItems () le da los cambios. Como uso accurev, hice List<AccurevTransaction> accurevTransList = changeSet.getItems(); .

Aquí, la lista modificada contiene archivos / nombres duplicados si se ha confirmado más de una vez durante la ventana de compilación actual.


Nota: debe usar el propio cliente SVN de Jenkins para obtener una lista de cambios. Hacerlo a través de un paso de compilación de shell no mostrará los cambios en la compilación.


Puede usar la API de acceso remoto de Jenkins para obtener una descripción legible por máquina de la compilación actual, incluido su conjunto de cambios completo. La sutileza aquí es que si tiene configurado un ''período de silencio'', Jenkins puede agrupar múltiples confirmaciones en el mismo repositorio en una única compilación, por lo que depender de un único número de revisión es un poco ingenuo.

Me gusta mantener mis enlaces de post-commit de Subversion relativamente simples y entregar cosas al servidor de CI. Para hacer esto, uso wget para activar la compilación, algo como esto ...

/usr/bin/wget --output-document "-" --timeout=2 / https://ci.example.com/jenkins/job/JOBID/build?token=MYTOKEN

El trabajo se configura en el lado de Jenkins para ejecutar un script de Python que aprovecha la variable de entorno BUILD_URL y construye la URL para la API a partir de eso. La URL termina luciendo así:

https://ci.example.com/jenkins/job/JOBID/BUILDID/api/json/

Aquí hay un ejemplo de código de Python que podría ejecutarse dentro del script de shell. He omitido el manejo de errores o la autenticación HTTP para que todo sea legible aquí.

import os import json import urllib2 # Make the URL build_url = os.environ[''BUILD_URL''] api = build_url + ''api/json/'' # Call the Jenkins server and figured out what changed f = urllib2.urlopen(api) build = json.loads(f.read()) change_set = build[''changeSet''] items = change_set[''items''] touched = [] for item in items: touched += item[''affectedPaths'']


Usando el plugin Build Flow y Git:

final changeSet = build.getChangeSet() final changeSetIterator = changeSet.iterator() while (changeSetIterator.hasNext()) { final gitChangeSet = changeSetIterator.next() for (final path : gitChangeSet.getPaths()) { println path.getPath() } }


#!/bin/bash set -e job_name="whatever" JOB_URL="http://myserver:8080/job/${job_name}/" FILTER_PATH="path/to/folder/to/monitor" python_func="import json, sys obj = json.loads(sys.stdin.read()) ch_list = obj[''changeSet''][''items''] _list = [ j[''affectedPaths''] for j in ch_list ] for outer in _list: for inner in outer: print inner " _affected_files=`curl --silent ${JOB_URL}${BUILD_NUMBER}''/api/json'' | python -c "$python_func"` if [ -z "`echo /"$_affected_files/" | grep /"${FILTER_PATH}/"`" ]; then echo "[INFO] no changes detected in ${FILTER_PATH}" exit 0 else echo "[INFO] changed files detected: " for a_file in `echo "$_affected_files" | grep "${FILTER_PATH}"`; do echo " $a_file" done; fi;

Es un poco diferente, necesitaba un script para Git en una carpeta en particular ... Entonces, escribí un cheque basado en jollychang .

Se puede agregar directamente al script de shell exec del trabajo. Si no se detectan archivos, saldrá de exit 0 , es decir, SUCCESS ... de esta manera siempre se puede activar el check-in en el repositorio, pero se genera cuando los archivos en la carpeta de interés cambian.

Pero ... Si quisiera construir a pedido (es decir, hacer clic en Crear ahora ) con el cambio desde la última compilación ... cambiaría _affected_files por:

_affected_files=`curl --silent $JOB_URL''lastSuccessfulBuild/api/json'' | python -c "$python_func"`


echo $SVN_REVISION svn_last_successful_build_revision=`curl $JOB_URL''lastSuccessfulBuild/api/json'' | python -c ''import json,sys;obj=json.loads(sys.stdin.read());print obj["''"changeSet"''"]["''"revisions"''"][0]["''"revision"''"]''` diff=`svn di -r$SVN_REVISION:$svn_last_successful_build_revision --summarize`