使用Jenkinsfile无意中覆盖了传递管道步骤

时间:2016-06-03 21:52:36

标签: jenkins-pipeline jenkinsfile

我创建了一个Jenkins文件,并添加了一个检查仓库的方法:

if(APEX_CUSTOM_AUTH.IS_SESSION_VALID) then
    /*your code here*/
end if;

然后我创建了一个使用" 结帐的舞台:General SCM "管道步骤。

 def checkout(branch){
    sshagent (credentials: ['ssh-jenkins-default']) {
        withEnv(["PATH+MAVEN=${tool 'Maven 3.3'}/bin","connectionUrl=scm:git:${SCM_URL}", "MAVEN_OPTS=-Duser.home=${WORKSPACE}"]) {
            sh "mvn -B scm:checkout -DconnectionUrl=${env.connectionUrl} -DcheckoutDirectory=target/checkout -DscmVersion=${branch} -DscmVersionType=branch"
        }
    }
}

我的控制台输出中的结果是:

  

mvn -B scm:checkout -DconnectionUrl =(混淆)   -DcheckoutDirectory = target / checkout - DscmVersion = [poll:false,scm:[:GitSCM,branches:[[name:(obfuscated)]],   doGenerateSubmoduleConfigurations:假的,   扩展:[[:WipeWorkspace]],submoduleCfg:[],   userRemoteConfigs:[[credentialsId :(混淆),url:]]]]   -DscmVersionType =分支

所以看来管道步骤的映射" checkout"作为参数传递给我的自定义checkout方法并分配给scmVersion属性。我不明白为什么呢?有没有办法阻止管道检出步骤调用我的checkout方法而不重命名我的checkout方法?

2 个答案:

答案 0 :(得分:1)

我认为您不小心使用相同名称的方法隐藏了内置checkout步骤。使用其他方法名称,或使用steps.checkout消除内置步骤的歧义。

答案 1 :(得分:0)

我能够通过修改checkout()方法来防止这种行为

OLD:

  

结帐(分支)

NEW:

  

checkout(String branch)