2017-02-03 7 views
6

Mam zadanie potokowe, które używa dwóch oddzielnych węzłów (jeden dla kompilacji, jeden dla testu), i chciałbym udostępnić zmienną między dwoma z tych bloków kodu w moim Jenkinsfile. Zakładam, że jest to możliwe, ale jestem nowy w tworzeniu groove i koncepcji Jenkinsfile. Oto odpowiedni kod do tej pory:Zmienna Jenkinsfile używana w dwóch oddzielnych etapach

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' 
     } 
} 

chcę przypisać „rev” zmienną w fazie budowy, ale potem złączyć go do zmiennej SDK_VERSION w fazie testów. Mój błąd jest:

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

Myślę, że można po prostu zdefiniować 'rev' poza swoimi' node' bloków z 'def rev = ""'. Następnie znajduje się w kontekście globalnym i może być używany wewnątrz bloków 'node '. – fishi

+0

Myślałem, że musi istnieć jakiś sposób, aby uczynić go globalnym, ale za każdym razem, gdy go sprawdzałem, wszystkie zasoby wskazywały na ustawienie globalnych zmiennych środowiskowych. Po prostu chciałem się upewnić, że używam go poprawnie. Dziękuję Ci! – user3270760

Odpowiedz

8

Wystarczy zdefiniować zmienną przed blokiem node:

def rev = '' 
node('build') { 
    stage('Checkout') { 
    checkout scm 
    } 
    stage('Build') { 
    bat(script: 'build') 
    rev = readFile('result') 
    } 
} 
Powiązane problemy