2017-02-03 21 views
6

İki ayrı düğüm (yapı için bir tane, test için bir tane) kullanan bir boru hattı işim var ve bu kod bloklarının ikisi arasındaki bir değişkeni Jenkinsfile numaralı telefonumda paylaşmak istiyorum. Mümkün olduğunu sanıyorum, ama ben groovy ve Jenkinsfile kavramı için çok yeni. İşte şimdiye kadar alakalı kodudur:İki ayrı aşamada kullanılan Jenkinsfile değişkeni

Ben yapı aşamasında "rev" değişkeni atamak, ama sonra test aşamasında SDK_VERSION değişkene bitiştirmek istiyorum
node('build') { 
    stage('Checkout') { 
     checkout scm 
    } 
    stage('Build') { 
     bat(script: 'build') 
     def rev = readFile('result') 
    } 
} 

node('test') { 
    stage('Test') { 
      def SDK_VERSION = "5.0.0001.${rev}" 
      bat "test.cmd ${env.BUILD_URL} ${SDK_VERSION}" 
      archiveArtifacts artifacts: 'artifacts/**/*.xml' 
      junit 'artifacts/**/*.xml' 
     } 
} 

. Benim hatadır:

groovy.lang.MissingPropertyException: No such property: rev for class: groovy.lang.Binding 
+1

Ben sadece 'def rev = ""' ile 'node' blokların dışında' rev' tanımlamak sanırım. Sonra küresel bir bağlamdadır ve 'düğüm' bloklarınızda kullanılabilir. – fishi

+0

Küresel hale getirmenin bir yolu olmalı diye düşünüyordum, ama her baktığımda, kaynaklar küresel Ortam değişkenlerini belirlemeye işaret ediyordu. Ben de sadece doğru şekilde kullandığımı emin olmak istedim. Teşekkür ederim! – user3270760

cevap

8

Sadece node bloktan önce değişken tanımlamak:

def rev = '' 
node('build') { 
    stage('Checkout') { 
    checkout scm 
    } 
    stage('Build') { 
    bat(script: 'build') 
    rev = readFile('result') 
    } 
} 
İlgili konular