Как получить текущую рабочую область с использованием Jenkins Pipeline Groovy script?

Я пытаюсь получить текущую рабочую область моей сборки Jenkins, используя скрипт конвейера Groovy:

node('master') {
    // PULL IN ENVIRONMENT VARIABLES
    // Jenkins makes these variables available for each job it runs
    def buildNumber = env.BUILD_NUMBER
    def workspace = env.WORKSPACE
    def buildUrl = env.BUILD_URL

    // PRINT ENVIRONMENT TO JOB
    echo "workspace directory is ${workspace}"
    echo "build URL is ${env.BUILD_URL}"
}

Возвращает:

[Pipeline] Allocate node : Start
Running on master in /Users/Shared/Jenkins/Home/jobs/test/workspace
[Pipeline] node {
[Pipeline] echo
workspace directory is null
[Pipeline] echo
build URL is http://localhost:8080/job/test/5/
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] End of Pipeline
Finished: SUCCESS

Ответ 1

Для меня просто ${workspace} работал даже без инициализации переменной 'workspace.'

Ответ 2

Пока нет переменной, включенной для этого, поэтому вы должны использовать метод shell-out-read-file:

sh 'pwd > workspace'
workspace = readFile('workspace').trim()

Или (если выполняется на главном node):

workspace = pwd()

Ответ 3

Я думаю, вы также можете выполнить функцию pwd() на конкретном node:

node {
    def PWD = pwd();
    ...
}

Ответ 4

Здесь вы можете найти ответ в коде job-dsl-plugin.

В основном вы можете сделать что-то вроде этого:

readFileFromWorkspace('src/main/groovy/com/groovy/jenkins/scripts/enable_safehtml.groovy')

Ответ 5

Краткое примечание для тех, кто использует bat в работе и нуждается в доступе к Workspace:

Это не сработает.

$WORKSPACE https://issues.jenkins-ci.org/browse/JENKINS-33511, как упомянуто здесь, работает только с PowerShell. Таким образом, ваш код должен иметь powershell для выполнения

 stage('Verifying Workspace') {
  powershell label: '', script: 'dir $WORKSPACE'
}