KatariaA
KatariaA

Reputation: 822

How to check if directory exists outside of workspace from a jenkins pipeline script

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

Answers (5)

David
David

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

ybonda
ybonda

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

balaganAtomi
balaganAtomi

Reputation: 617

im not sure that that was your question but fileExists() works for directories as well

Upvotes: 23

KatariaA
KatariaA

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

James HUANG
James HUANG

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

Related Questions