欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jenkins pipeline中bat或者shell命令执行结果,赋值给变量,变量不生效解决方法

程序员文章站 2022-03-09 23:32:21
...

例如:想利用bat脚本查询出Git_commit号,赋值给变量,下面的pipeline语句用到此变量,通过直接赋值的方式,下一条语句是无法获取到变量值的。
此种写法:

//从项目readme中读取Git_Commit号
 Git_Commit =bat label: '', script: 'compile_scripts\\git_commit.bat %svn_project% %svn_branch%'
                  
 //编译源码,其中Git_commit 获取不到值
 bat label: '', script: 'python compile_scripts\\firmware_compile.py %svn_project% %svn_branch% %svn_revision% %Git_commit%'

更改为:将代码写到bat“”“”“”“”“”中。
示例1:

stage('compile source code') {
            steps {
                script {
                    bat """
                        FOR /F %%i IN ('compile_scripts\\git_commit.bat %svn_project% %svn_branch%') DO @set Git_commit=%%i
                        python compile_scripts\\firmware_compile.py %svn_project% %svn_branch% %svn_revision% %Git_commit%
                        xcopy /s/y/i/f "%svn_project%\\%svn_branch%\\*.zip" "D:\\firmware_history"
                    """
                }
            }
        }

示例2:

stage('镜像制作') {
        echo "镜像制作----开始"
        //创建一个制作镜像的临时目录
        def image_root_path = "/home/temp"

        //进入镜像的临时目录,开始制作镜像
        sh """
            mkdir -p ${image_root_path}
            #获取maven工程打包后的名称
            projectBuildFinalName=\$(mvn -f ${projectName} -q -Dexec.executable='echo' -Dexec.args='\${project.build.finalName}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.6.0:exec)
            #将打好的jar包和Dockerfile复制到制作镜像的临时目录下
            cp ./${projectName}/target/\$projectBuildFinalName.jar ${image_root_path}
            cp ./${projectName}/Dockerfile  ${image_root_path}
            #制作镜像
            cd ${image_root_path}
            docker build --build-arg JAR_FILE=\$projectBuildFinalName.jar -t ${image_name} .
            rm -rf ${image_root_path}
            """
        echo "镜像制作----成功\n"
    }