Necesito pasar el nombre de usuario del solicitante de una compilación a la secuencia de comandos que realmente está haciendo el trabajo. Al mirar la salida de la consola para una compilación en particular, la primera línea siempre es "Iniciado por el usuario foo", por lo que Jenkins claramente está haciendo un seguimiento de quién activó la compilación. Entonces debería ser posible pasar esa información al trabajo ... La pregunta es, ¿cómo?En Jenkins, ¿cómo saben las construcciones quién los solicitó?
Respuesta
El nombre de usuario no se pone en una variable de entorno fácil de buscar, pero se puede conseguir usando el xml (or json or python) api - tan pronto como se inicia una construcción, http://[jenkins-server]/job/[job-name]/[build-number]/api/xml
se rellena con datos:
<freeStyleBuild>
<action>
<cause>
<shortDescription>Started by user foobar</shortDescription>
<userName>foobar</userName>
</cause>
</action>
<building>true</building>
[...]
user30997
Por favor, echa un vistazo a Jenkins Build User Vars plugin, hace lo que necesita:
se utiliza para fijar siguiente usuario construir variables:
- BUILD_USER - nombre completo del usuario inició la construcción,
- BUILD_USER_FIRST_NAME - nombre de usuario inició la construcción,
- BUILD_USER_LAST_NAME - apellido del usuario inició la construcción,
- BUILD_USER_ID - Identificación de usuario inició la acumulación.
import os
import jenkinsapi.build
import jenkinsapi.jenkins
#Required Environment variables example:
#JENKINS_URL=http://jenkinsserver/
#JOB_NAME=TEST_GT
#BUILD_NUMBER=8
jenkins_inst = None
def get_jenkins_inst():
if jenkins_inst == None:
jenkins_url = os.environ['JENKINS_URL']
print("Connect to jenkins " + jenkins_url)
jenkins_inst = jenkinsapi.jenkins.Jenkins(jenkins_url)
return jenkins_inst
def get_jenkins_job():
jenkins_inst = get_jenkins_inst()
jenkins_job_name = os.environ['JOB_NAME']
print("Get jenkins job " + jenkins_job_name)
return jenkins_inst.get_job(jenkins_job_name)
def get_jenkins_user():
jenkins_job = get_jenkins_job()
jenkins_buildno = int(os.environ['BUILD_NUMBER'])
print("Get jenkins job build " + str(jenkins_buildno))
cur_build = jenkins_job.get_build(jenkins_buildno)
return cur_build.get_actions()['causes'][0]['userId']
en su trabajo añadir "Ejecutar sistema de escritura maravilloso":
def yourUserName = build.causes[0].userId
He intentado utilizar Jenkins Build User Vars plugin y notificar a una habitación HipChat que una acumulación fue iniciado por un determinado usuario, pero La variable BUILD_USER
no estaba disponible para el complemento HipChat, posiblemente porque la acción HipChat ocurrió antes de que el complemento Build User Vars inyecte la variable.
así que instalé pre-scm-buildstep plugin y ha añadido:
]
// Inject environment variables using Groovy
import hudson.model.*
def build = Thread.currentThread().executable
def userCause = build.getCause(hudson.model.Cause$UserIdCause)
def userName = userCause?.userId ?: 'Jenkins'
def envVars = ['BUILD_USER': userName]
for (item in envVars) {
build.addAction(new ParametersAction([
new StringParameterValue(item.key, item.value)
]))
}
GRACIAS. Jenkins hace esta MANERA más difícil de lo que debería ser. No veo "Ejecutar script de Groovy del sistema" como una de las opciones para "Rub buildstep before SCM runs". ¿Alguna idea de cómo obtener eso o hacer lo mismo sin Groovy? –
No importa, encontró el complemento Groovy aquí: https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin –
logré conseguirlo (en Jenkins 2,58):
currentBuild.getRawBuild().getCauses()[0].getUserId()
Por supuesto que necesita para establecer permisos en Jenkins para poder llamar a estos métodos. No siempre es el objeto Causa 0 que está buscando, p. puede ser otro si reproduces la compilación de otro usuario (no lo probé).
- 1. Cómo encadenar las construcciones TFS?
- 2. Jenkins pierde espacios de trabajo periódicamente, desencadena construcciones no deseadas
- 3. Jenkins personalizar la vista del historial de construcciones
- 4. ¿Los beneficios/desventajas de las construcciones de unidades?
- 5. ¿Hay un complemento de "quién rompió la compilación" para Jenkins?
- 6. Cómo recombinar construcciones en TeamCity?
- 7. Jenkins + git: error "dime quién eres", ¿por qué necesita etiquetar?
- 8. Por curiosidad, ¿cuántas personas saben cómo se compilan las expresiones regulares?
- 9. ¿Cómo saben los compiladores dónde encontrar #include <stdio.h>?
- 10. android.database.CursorIndexOutOfBoundsException: Índice -1 solicitó
- 11. ¿Cómo puedo evitar que dos proyectos/construcciones de Jenkins se ejecuten al mismo tiempo?
- 12. Cómo determinar qué compilador se solicitó
- 13. Archivar los artefactos en Jenkins
- 14. ¿Cómo acelerar las construcciones de xcode sin modificaciones de proyecto?
- 15. Jenkins - Configure Jenkins para sondear los cambios en SCM
- 16. En los accesorios Rails, ¿quién es Quentin?
- 17. cómo encontrar quién bloquea quién en SQL Server 2005
- 18. ¿Quién genera las claves de sesión HTTPS?
- 19. Construcciones sin bloqueo en .net
- 20. ¿Cómo saber quién llamó a un método?
- 21. Las etiquetas de servidor no pueden contener construcciones <% ... %>
- 22. ¿Cómo configurar las credenciales de SVN en Jenkins?
- 23. PHP: ¿Qué son construcciones idiomáticas y por qué las necesitamos?
- 24. Encontrar instrucciones estáticas de importación para las construcciones de Mockito
- 25. Encuentra quién llama al método
- 26. Cómo saben evento de desplazamiento ha terminado con jQuery
- 27. Jenkins: cómo hacer los parámetros necesarios en una compilación parametrizada?
- 28. ¿Cómo incluir git changelog en los correos electrónicos de Jenkins?
- 29. Averiguando quién rompió la mayoría de las compilaciones en Teamcity
- 30. Quién debe quién optimización de dinero
no funciona para mí, jenkins dice 'El complemento par 'No reconocido macro' BUILD_USER'' está instalado –