steps scm library example actions jenkins parameters jenkins-pipeline

scm - jenkinsfile



Jenkins Pipeline Job con parĂ¡metro de archivo (5)

Actualmente hay un problema con la tubería y el parámetro de archivo ( https://issues.jenkins-ci.org/browse/JENKINS-27413 ).

Estoy armando un trabajo de tubería de Jenkins que tomará un parámetro de archivo. Puedo activar el trabajo y apuntarlo a un archivo, sin embargo no puedo encontrar dónde terminó el archivo (en un trabajo de estilo libre normal estaría en el área de trabajo).

¿Dónde ha ido el archivo subido? ¿O los parámetros de archivo no funcionan actualmente con tuberías?


Encontrado un WA (Estrictamente para entrada de archivo basada en texto) Podemos usar el parámetro de cadena multilínea Jenkins y pedirle al usuario que pegue el contenido del archivo en él. Y en nuestra canalización, escriba el contenido de este parámetro utilizando el paso pipeline writeFile, como:

stage(''File Param WA'') { writeFile file: ''demo.yaml'', text: params.DEMO_YAML }


Intenté usar la solución provista por @Christoph Forster, pero el archivo de entrada no se copió en ningún lugar del área de trabajo. Así que utilicé la solución según lo dispuesto en https://bitbucket.org/janvrany/jenkins-27413-workaround-library/src/6b7dada8ea37?at=default

La biblioteca proporciona una nueva biblioteca, unstashParam, que guarda el parámetro de compilación del archivo en un área de trabajo. Funciona bien con texto y archivo yaml.


Resuelto de la siguiente manera:

node { deleteDir() stage("upload") { def inputFile = input message: ''Upload file'', parameters: [file(name: ''data.zip'')] new hudson.FilePath(new File("$workspace/data.zip")).copyFrom(inputFile) inputFile.delete() } stage("checkout") { echo fileExists(''data.zip'').toString() } }

Sé que la solución no es tan hermosa porque la tubería se interrumpe para la carga pero funciona.

Además, el "copyFrom" es necesario, porque la entrada almacena el "data.zip" en el directorio de trabajos y no en el área de trabajo (no sé por qué)


También intenté usar la solución de @Christoph Forster, pero recibí un error de seguridad de script cuando Groovy Sandbox está habilitado.

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new hudson.FilePath java.io.File

Sin embargo, parece que podemos omitir las acciones de copia y eliminación de archivos (y omitir la restricción de Groovy Sandbox) simplemente requiriendo que el archivo se cargue en el área de trabajo del trabajo. Solo agregue la variable del área de trabajo al nombre del archivo de la siguiente manera:

stage("upload") { def inputFile = input message: ''Upload file'', parameters: [file(name: "$workspace/data.zip")] }