Reputation: 822
Given I have a directory path, how do I check if this directory exists outside of the workspace from a jenkins pipeline script.
Upvotes: 25
Views: 75160
Reputation: 88
for anyone interested a bit more universal (windows, mac, linux and shared library...):
def listDirectories(String Directory, String Pattern) {
def dlist = []
new File(Directory).eachDir {dlist << it.name }
dlist.sort()
dlist = dlist.findAll { it.contains Pattern }
return dlist
}
usage (for this):
if (listDirectories(Directory: "C:/", Pattern: "Windows").size() == 1) { ... }
Upvotes: 1
Reputation: 1710
None from suggestions above worked for me...
This is 100% working code:
efs_path = '~/efs-mount-point'
stdout = sh( script: '''#!/bin/bash
set -ex
if [ -d ''' + efs_path + ''' ]; then
echo "true"
else
echo "false"
fi
''', returnStdout: true)
echo stdout
if (stdout.contains('false')) {
error('No such directory: ' + efs_path)
}
Upvotes: -1
Reputation: 617
im not sure that that was your question but fileExists() works for directories as well
Upvotes: 23
Reputation: 822
Tried a few things and turned out the answer was already in front of me. fileExists can check for directories as well. Here's how I got around the problem. In this example, I am creating a directory on Windows if it doesn't exist.
Step 1: dir into the directory
dir("C:/_Tests")
Step 2: Now, use fileExists without any file name.
if(!fileExists("/"))
{
bat "mkdir \"C:/_Tests\""
}
Upvotes: 21
Reputation: 219
fileExists(target_dir)
in pipeline checks the given file in workspace, it is not permitted to access the outside.
to do this, the sh
or bat
in pipeline can help verify if the target directory exists by calling shell command.
res = sh(script: "test -d ${target_dir} && echo '1' || echo '0' ", returnStdout: true).trim()
if(res=='1'){
echo 'yes'
} else {
echo 'no'
}
Upvotes: 21