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)