【问题标题】:How to retrieve current workspace using Jenkins Pipeline Groovy script?如何使用 Jenkins Pipeline Groovy 脚本检索当前工作区?
【发布时间】:2016-10-17 04:39:11
【问题描述】:

我正在尝试使用 Groovy 管道脚本获取我的 Jenkins 构建的当前工作区:

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

【问题讨论】:

标签: jenkins groovy jenkins-pipeline


【解决方案1】:

对我来说,${WORKSPACE} 甚至没有初始化变量 workspace 就可以工作。

【讨论】:

  • 我也是,但只有大写 ${WORKSPACE} 有效,${workspace} 无效
  • ${WORKSPACE} 也适用于我,而不适用于 ${workspace}${workspace} 被视为class workspace
【解决方案2】:

还没有包含变量,所以你必须使用 shell-out-read-file 方法:

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

或者(如果在主节点上运行):

workspace = pwd()

【讨论】:

  • 不要忘记 trim() 你的 readFile() 结果,否则你会突然得到一个换行符。
【解决方案3】:

我认为你也可以在特定节点上执行 pwd() 函数:

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

【讨论】:

    【解决方案4】:

    我在Jenkinsfile中已经成功使用如下图:

    steps {
      script {
        def reportPath = "${WORKSPACE}/target/report"
        ...
      }
    }
    

    【讨论】:

      【解决方案5】:

      给在工作中使用 bat 并需要访问 Workspace 的任何人的快速说明:

      它不起作用

      $WORKSPACE https://issues.jenkins-ci.org/browse/JENKINS-33511 此处提到的仅适用于 PowerShell。所以你的代码应该有powershell 来执行

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

      【讨论】:

        【解决方案6】:

        您可以在job-dsl-plugin code 中找到答案。

        基本上你可以这样做:

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

        【讨论】:

          【解决方案7】:

          在 Jenkins 流水线脚本中,我正在使用

          targetDir = workspace
          

          非常适合我。无需使用 ${WORKSPACE}

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-02-24
            • 1970-01-01
            • 2022-09-29
            • 2018-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多