【问题标题】:Inadvertently overriding delivery pipeline steps using Jenkinsfile使用 Jenkinsfile 无意中覆盖了交付管道步骤
【发布时间】:2016-06-06 20:16:00
【问题描述】:

我创建了一个 Jenkinsfile 并添加了一个检查 repo 的方法:

 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=(混淆) -DcheckoutDirectory=target/checkout -DscmVersion=[poll:false, scm:[:GitSCM, branch:[[name:(obfuscated)]], doGenerateSubmoduleConfigurations:false, 扩展:[[:WipeWorkspace]],子模块配置:[], userRemoteConfigs:[[credentialsId:(混淆), url:]]]]] -DscmVersionType=分支

因此,管道步骤“结帐”的映射似乎已作为参数传递给我的自定义结帐方法并分配给 scmVersion 属性。我不明白为什么?有没有办法阻止管道结帐步骤调用我的结帐方法而不重命名我的结帐方法?

【问题讨论】:

    标签: jenkins-pipeline jenkinsfile


    【解决方案1】:

    我想你不小心用同名方法隐藏了内置的checkout 步骤。使用不同的方法名称,或使用steps.checkout 来消除内置步骤的歧义。

    【讨论】:

      【解决方案2】:

      我可以通过修改我的 checkout() 方法来防止这种行为

      旧:

      结帐(分支)

      新:

      结帐(字符串分支)

      【讨论】:

      • 我回答了我的问题,但如果有人有任何其他反馈,请告诉我。我认为 Groovy 的优点之一是不必定义参数类型。我现在担心我的其他 Jenkinsfile 中的其他方法可能会无意中与管道步骤交叉路径。
      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2021-06-13
      • 2022-08-14
      • 2020-05-10
      相关资源
      最近更新 更多