0

在我的共享库中,我定义:

变量/checkoutSvnCode.groovy

#!/usr/bin/env groovy    
//get svn code    
def call(String URL="url") {
    def scmVars = checkout([
        $class: 'SubversionSCM',
        additionalCredentials: [],
        excludedCommitMessages: '',
        excludedRegions: '',
        excludedRevprop: '',
        excludedUsers: '',
        filterChangelog: false,
        ignoreDirPropChanges: false,
        includedRegions: '',
        locations: [[
            cancelProcessOnExternalsFail: true,
            credentialsId: 'svn_auth',
            depthOption: 'infinity',
            ignoreExternalsOption: true,
            local: '.',
            remote: "${URL}"
        ]],
        quietOperation: false,
        workspaceUpdater: [$class: 'UpdateUpdater']
    ])
    def REVISION = scmVars.SVN_REVISION
    println "//Revision:\"${REVISION}\""
}

在我的管道中,我定义

#!/usr/bin/env groovy
@Library('jenkins-pipeline-library')_
import com.test.GlobalVars

    pipeline {    
        environment {
            def SVN_ADDR = "svn://code.test.com/myproject"
        }
        
        agent any
        
        stages {
            
            stage('getCode') {
                steps {
                    script {
                        checkoutSvnCode("${SVN_ADDR}")
                        println "//Revision:\"${REVISION }\""
                    }
                }
            }
    
        }
    }

现在我得到这个错误

groovy.lang.MissingPropertyException:没有这样的属性:类的修订:groovy.lang.Binding

我怎样才能在我的管道中获得“修订”?

4

4 回答 4

1

你的 REVISION var ${REVISION } 应该是 ${REVISION}

于 2020-07-15T10:53:01.367 回答
0

您还可以让您的checkoutSvnCodeDSL 函数返回修订版,然后:

        stage('getCode') {
            steps {
                script {
                    def REVISION = checkoutSvnCode("${SVN_ADDR}")
                    println "//Revision:\"${REVISION}\""
                }
            }
        }
于 2020-07-16T03:09:22.607 回答
0

您在 groovy 库文件中定义 REVISION,该文件从您的管道进程中调用,然后终止。我不是 groovy 专家,但调用脚本调用终止进程的正常行为是子进程(库文件)中的所有值在子进程完成时消失。问题似乎是您的管道进程无法访问库文件中的变量。

您是否考虑过使用 Jenkins 环境变量: SVN_REVISION ?

${SVN_REVISION} 应该有它 - 你可以试试:

println "//Revision:\"${SVN_REVISION}\""

否则,它应该在 jenkins 文件中,或者,最坏的情况是从炮击到命令中获取它:

svn info --show-item revision
于 2020-07-15T11:54:25.537 回答
0

最后我解决了这个问题

变量/checkoutSvnCode.groovy

#!/usr/bin/env groovy    
//get svn code    
def call(String URL="url") {
    def scmVars = checkout([
        $class: 'SubversionSCM',
        additionalCredentials: [],
        excludedCommitMessages: '',
        excludedRegions: '',
        excludedRevprop: '',
        excludedUsers: '',
        filterChangelog: false,
        ignoreDirPropChanges: false,
        includedRegions: '',
        locations: [[
            cancelProcessOnExternalsFail: true,
            credentialsId: 'svn_auth',
            depthOption: 'infinity',
            ignoreExternalsOption: true,
            local: '.',
            remote: "${URL}"
        ]],
        quietOperation: false,
        workspaceUpdater: [$class: 'UpdateUpdater']
    ])
    return scmVars
}

在管道中

#!/usr/bin/env groovy
@Library('jenkins-pipeline-library')_
import com.test.GlobalVars

    pipeline {    
        environment {
            def SVN_ADDR = "svn://code.test.com/myproject"
        }
        
        agent any
        
        stages {
            
            stage('getCode') {
                steps {
                    script {
                        def REVISION = checkoutSvnCode("${SVN_ADDR}").SVN_REVISION
                        println "//Revision:\"${REVISION }\""
                    }
                }
            }
    
        }
    }

现在我可以成功获得 SVN_REVISION ^_^

//修订:“39128”

于 2020-07-16T03:25:00.160 回答