plugin - Jenkins: Cómo usar una variable de un shell previo a la construcción en las "Metas y opciones" de Maven
maven project configuration in jenkins (5)
Creo que lo mejor que puedes hacer es probar el plugin EnvInject para esto junto con tu paso inicial de pre-scm.
- Ejecuta el pre-scm como ya lo hace.
- Utiliza el env inyección para cargar el archivo para los pasos de compilación del trabajo principal
Considere cargar el contenido de su archivo (formato de propiedades) o ejecute un script que cargue el archivo como desee y ponga una variable disponible para el resto del trabajo con la opción "Preparar un entorno para la ejecución" .
Espero que esto ayude.
Tengo un trabajo de Maven en Jenkins. Antes del paso de compilación real, tengo un paso previo a la compilación "Ejecutar cáscara". En ese shell establecí una variable:
REVISION=$(cat .build_revision)
Me gustaría usar esa variable en el trabajo de construcción de Maven en "Metas y opciones":
clean install -Drevision=${REVISION}
¡Pero eso no funciona! El "Drevision" está configurado en "$ {REVISION}", no el valor real de $ {REVISION}. Salida:
Executing Maven: -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Drevision=${REVISION}
Funciona con las variables de entorno de Jenkins:
clean install -Dbuild=${BUILD_NUMBER}
Establece "Dbuild" al número de compilación real. Salida:
Executing Maven: -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Dbuild=54
Mi pregunta: ¿Cómo usar una variable de shell en Maven "Metas y opciones"?
EDITAR:
Traté de usar Jenkins EnvInject Plugin para "Inyectar variables de entorno" después del shell previo a la construcción, y ahora se puede acceder a mi variable, por ejemplo, shells posteriores a la construcción, pero todavía no está disponible en Maven "Goals and options".
Entonces es posible configurar "Inyectar variables de entorno para el proceso de compilación" usando el Complemento EnvInject, que realmente hace que esas variables estén disponibles en Maven "Metas y opciones", pero se configuran justo después del pago de SCM, es decir, antes de los pasos previos a la construcción. y no admite evaluaciones de expresiones
Está en el camino correcto aquí, pero olvidó una tercera característica del EnvInject-Plugin: el paso de compilación "Inyectar variables de entorno" que puede inyectar variables en los siguientes pasos de compilación en función del resultado de un script o propiedades.
Estamos usando el plugin EnvInject así como así; Un script configura un recurso y comunica sus parámetros usando propiedades que el plugin propaga como variables de entorno.
es decir, configurar una base de datos temporal para la construcción:
Este problema se debe a un error en el plugin de Jenkins Maven Project, tal como se detalla en este informe de error abierto el 2012-06-22. El complemento aún no se ha corregido a partir de la versión 2.1.
Se ha propuesto una solución para el plugin Maven Project, pero aún no se ha integrado. Aquí está el enlace a la solicitud de extracción: https://github.com/jenkinsci/maven-plugin/pull/14
Si construye el plugin usted mismo con el parche de solicitud de extracción aplicado, las variables se inyectan y se ponen a disposición del campo "objetivos y opciones" como se esperaba.
Tuve un problema muy similar, tratando de calcular una versión de compilación e inyectarla en la compilación. Después de encontrarme con todos los mismos problemas (sin expandir, etc.), utilicé la opción "Generar variables de entorno a partir del script", que interpreta los resultados como pares tag = value en las variables de Jenkins. La secuencia de comandos :
#generate a version code that is high enough to surpass previously published clients
val=`expr 150000 + $BUILD_NUMBER`
echo VERSION_CODE=$val
Después de esto, pude inyectar $ VERSION_CODE en maven de la siguiente manera:
-Dbuild.vercode=${VERSION_CODE}
Espero que eso te funcione.
Veo que hay una respuesta aceptada, pero para un novato en Jenkins me resultó difícil comprenderlo todo. Es por eso que agregaría un poco más de detalle en esta respuesta y mostraré cómo lo hice.
Como @jjungnickel sugirió que necesita tener EnvInject Plugin instalado para Jenkins. Luego, en la sección Crear > Agregar paso de compilación obtendrás la opción "Inyectar variables de entorno".
Básicamente la idea es:
- Agregue las variables a las que desea acceder más adelante en un archivo (puede ser agregado por un script de shell o puede ser un archivo del sistema de archivos).
- Inyecta el archivo con las variables.
- Usa las variables
Aquí una configuración de muestra:
Como quiero usarlos en Maven Goal, necesito marcar la casilla Inyectar variables de compilación.
Luego, al final de la compilación, elimino el archivo solo porque quiero mantener el entorno como estaba antes de la compilación.