Jenkins 管道脚本全局变量

Jenkins pipeline script global variable

我正在学习 jenkins,并且正在研究示例管道

pipeline {
agent any

stages {
    stage('Stage1') { 
        steps {
            bat  '''
                    cd C:/Users/roger/project/
            
                    python -u script1.py
                '''
        }
    }
stage('Stage2') { 
        steps {
            bat  '''
                    cd cd C:/Users/roger/project/abc/
            
                    python -u script2.py
                '''
        }
    }
stage('Stage3') { 
        steps {
            bat  '''
                    cd cd C:/Users/roger/project/abc/new_dir/
            
                    python -u demo.py
                '''
        }
    }
}
}

有没有办法将项目 C:/Users/roger/project/ 的基本路径存储为一个变量,以便它可以用于向其附加新路径而不是写入整个路径。

我怎样才能写在上面的阶段,这样我就不必每次都重复写相同的基本路径到每个阶段

您有多种选择,最简单的方法是在 environment 指令 (read more) 中定义参数,这将使参数可用于管道中的所有阶段,并且还将加载它到任何解释器步骤的执行环境,如 shbatpowershell,从而使该参数也可用于您作为环境变量执行的脚本。
此外,environment 指令支持非常有用的 credential parameters
在您的情况下,它看起来像:

 pipeline {
     agent any
     environment {
         BASE_PATH = 'C:/Users/roger/project/'
     }
     stages {
         stage('Stage1') {
             steps {
                 // Using the parameter as a runtime environment variable with bat syntax %%
                 bat  '''
                     cd %BASE_PATH%
                     python -u script1.py
                 '''
             }
         }
         stage('Stage2') {
             steps {
                 // Using groovy string interpolation to construct the command with the parameter value
                 bat  """
                     cd ${env.BASE_PATH}abc/
                     python -u script2.py
                 """
             }
         }
     }
 }

您的另一个选择是使用在管道顶部定义的全局变量,它的行为与任何 groovy 变量一样,并且可用于管道中的所有阶段(但不适用于执行解释器步骤的环境)。
类似于:

 BASE_PATH = 'C:/Users/roger/project/'

 pipeline {
     agent any
     stages {
         stage('Stage1') {
             steps {
                 // Using the parameter insdie a dir step to change directory 
                 dir(BASE_PATH) {
                     bat 'python -u script1.py'
                 }
             }
         }
         stage('Stage2') {
             steps {
                 // Using groovy string interpolation to construct the command with the parameter value
                 bat  """
                     cd ${BASE_PATH}abc/
                     python -u script2.py
                 """
             }
         }
     }
 }