Saltar al contenido

Obtenga una lista de nombres de archivo en una carpeta determinada en Jenkinsfile (Groovy)

Solución:

Realmente no puedes hacer uso del new File y formas normales de Groovy / Java para atravesar sistemas de archivos. La llamada tiene control de seguridad de forma predeterminada (consulte JENKINS-38131) y, en general, ni siquiera funcionará debido a cómo Jenkins Pipelines ejecuta su código de canalización.

Una forma de hacerlo sería utilizar el findFiles paso del Pasos de la utilidad de canalización enchufar. Devuelve un FileWrapper[] que se puede inspeccionar / utilizar para otros fines.

node {
  // ... check out code, whatever
  final foundFiles = findFiles(glob: 'dockerfiles/**/*')
  // do things with FileWrapper[]
}

Otra opción es desembolsar y capturar el estándar:

node {
  // ... check out code, whatever
  final foundFiles = sh(script: 'ls -1 dockerfiles', returnStdout: true).split()
  // Do stuff with filenames
}

Este funciona, pero es feo como el infierno:

#!groovy

node('master') {
    FILES_DIR = './foo'
    cleanWs()

    sh """
        mkdir foo
        touch foo/bar1
        touch foo/bar2
        touch foo/bar3
    """

    def TMP_FILENAME = ".docker_files_list"
    sh "ls ${FILES_DIR} > ${TMP_FILENAME}"
    def filenames = readFile(TMP_FILENAME).split( "\r?\n" );
    sh "rm -f ${TMP_FILENAME}"

    for (int i = 0; i < filenames.size(); i++) {
        def filename = filenames[i]
        echo "${filename}"
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *