使用 Jenkinsfile 无意中覆盖了交付管道步骤
Inadvertently overriding delivery pipeline steps using Jenkinsfile
我创建了一个 Jenkinsfile 并添加了一个方法来检出存储库:
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"
}
}
}
然后我创建了一个使用“checkout: General SCM”管道步骤的阶段。
if (BRANCH_NAME ==~ /someregex}/){
stage name: 'DEPLOY' , concurrency: 1
node {
ws("${WORKSPACE}"){
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '${BRANCH_NAME}']],
doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace']],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ssh-jenkins-default', url: '${SCM_URL}']]]
deploy(BRANCH_NAME)
}
}
我的控制台输出的结果是:
mvn -B scm:checkout -DconnectionUrl=(obfuscated)
-DcheckoutDirectory=target/checkout -DscmVersion=[poll:false, scm:[:GitSCM, branches:[[name:(obfuscated)]],
doGenerateSubmoduleConfigurations:false,
extensions:[[:WipeWorkspace]], submoduleCfg:[],
userRemoteConfigs:[[credentialsId:(obfuscated), url:]]]]
-DscmVersionType=branch
因此,管道步骤 "checkout" 的映射似乎已作为参数传递到我的自定义结帐方法并分配给 scmVersion 属性。我不明白为什么?有没有办法在不重命名我的结帐方法的情况下阻止管道结帐步骤调用我的结帐方法?
我能够通过修改我的 checkout() 方法来防止这种行为
旧:
checkout(branch)
新:
checkout(String branch)
我认为您不小心用同名方法隐藏了内置 checkout
步骤。使用不同的方法名称,或使用 steps.checkout
来消除内置步骤的歧义。
我创建了一个 Jenkinsfile 并添加了一个方法来检出存储库:
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"
}
}
}
然后我创建了一个使用“checkout: General SCM”管道步骤的阶段。
if (BRANCH_NAME ==~ /someregex}/){
stage name: 'DEPLOY' , concurrency: 1
node {
ws("${WORKSPACE}"){
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '${BRANCH_NAME}']],
doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace']],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ssh-jenkins-default', url: '${SCM_URL}']]]
deploy(BRANCH_NAME)
}
}
我的控制台输出的结果是:
mvn -B scm:checkout -DconnectionUrl=(obfuscated) -DcheckoutDirectory=target/checkout -DscmVersion=[poll:false, scm:[:GitSCM, branches:[[name:(obfuscated)]], doGenerateSubmoduleConfigurations:false, extensions:[[:WipeWorkspace]], submoduleCfg:[], userRemoteConfigs:[[credentialsId:(obfuscated), url:]]]] -DscmVersionType=branch
因此,管道步骤 "checkout" 的映射似乎已作为参数传递到我的自定义结帐方法并分配给 scmVersion 属性。我不明白为什么?有没有办法在不重命名我的结帐方法的情况下阻止管道结帐步骤调用我的结帐方法?
我能够通过修改我的 checkout() 方法来防止这种行为
旧:
checkout(branch)
新:
checkout(String branch)
我认为您不小心用同名方法隐藏了内置 checkout
步骤。使用不同的方法名称,或使用 steps.checkout
来消除内置步骤的歧义。