将当前工作空间路径存储在变量中以用于后续阶段

时间:2017-05-30 14:00:42

标签: jenkins jenkins-pipeline

我正在为我的管道使用声明性语法,并且希望将路径存储到我的一个阶段上使用的工作空间,以便可以在稍后阶段使用相同的路径。

我已经看到我可以调用pwd()来获取当前目录,但是如何分配在阶段之间使用的变量?

修改

我试图通过自己的自定义变量定义并使用类似的ws指令来实现:

pipeline {
  agent { label 'master' }
  stages {
    stage('Build') {
      steps {
        script {
          def workspace = pwd()
        }
        sh '''
          npm install
          bower install
          gulp set-staging-node-env
          gulp prepare-staging-files
          gulp webpack
        '''
        stash includes: 'dist/**/*', name: 'builtSources'
        stash includes: 'config/**/*', name: 'appConfig'
        node('Protractor') {
          dir('/opt/foo/deploy/') {
            unstash 'builtSources'
            unstash 'appConfig'
          }
        }        
      }
    }
    stage('Unit Tests') {
      steps {
        parallel (
          "Jasmine": {
            node('master') {
              ws("${workspace}"){
                sh 'gulp karma-tests-ci'
              }
            }
          },
          "Mocha": {
            node('master') {
              ws("${workspace}"){
                sh 'gulp mocha-tests'
              }
            }
          }
        )
      }
      post {
        success {
          sh 'gulp combine-coverage-reports'
          sh 'gulp clean-lcov'
          publishHTML(target: [
            allowMissing: false,
            alwaysLinkToLastBuild: false,
            keepAll: false,
            reportDir: 'test/coverage',
            reportFiles: 'index.html',
            reportName: 'Test Coverage Report'
          ])
        }
      }
    }
    }
}

在Jenkins构建控制台中,我发现这种情况发生了:

[Jasmine] Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2
[Pipeline] [Jasmine] {
[Pipeline] [Jasmine] ws
[Jasmine] Running in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2@2

从第一阶段分配的原始工作空间实际上是_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ

所以看起来它不起作用,我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

pipeline {
    agent none
    stages {
        stage('Stage-One') {
            steps {
                echo 'StageOne.....'
                script{ name = 'StackOverFlow'}
            }
        }
        stage('Stage-Two'){
            steps{
                echo 'StageTwo.....'
                echo "${name}"
            }
        }
    }
}

以上为StackOverFlow StageTwo中的echo "${name}打印sh "echo ${env.WORKSPACE}" 您还可以使用NSManagedObjectID获取分配给构建的目录的绝对路径作为工作区。

答案 1 :(得分:0)

您可以将值放入environment variable

中描述的this answer
CURRENT_PATH= sh (
    script: 'pwd',
    returnStdout: true
).trim()

您正在运行哪个版本? Maybe您可以将WORKSPACE变量分配给环境var?

或者我完全误解了this is你在寻找什么?