声明式Jenkins管道:在共享库中使用“本地”功能

时间:2020-09-09 07:42:07

标签: jenkins jenkins-pipeline

我为我们的项目使用共享库来建立通用的ci管道。仍然有一些项目特定的东西,例如构建脚本。因此,我想做的是在本地项目的Jenkinsfile中定义一些函数,并在库中使用它们

这是我的Jenkinsfile

library identifier: "pipeline-helper@master", retriever: modernSCM(
    [$class: 'GitSCMSource',
        remote: 'https://bitbucket.intra/scm/jenkins/pipeline-helper.git',
        credentialsId: 'bitbucket.service.user'
    ])

defaultCiPipelineGeneric {
    node = "APR"
}

/**
 * Builds the application based on parameters
 * @param pipelineParams map of all pipeline parameters
 */
def buildApplication(pipelineParams) {
    powershell '''
Write-Host "### [INFO] $(Get-Date) Restoring nuget packages: ${env:NUGET_HOME}"

$exe = ${env:NUGET_HOME} + "\\nuget.exe"
&$exe restore .\\Solution.sln
cmd.exe /c .\\Build.bat
cmd.exe /c .\\UnitTests.bat
'''
}

pipeline-helper定义了公共管道,我想在其中使用buildApplication()而不是Jenkinsfile

中定义的pipeline-helper

请参见下面的defaultCiPipelineGeneric.groovy

的内容
/**
 * Shared ci pipeline for generic projects
 * Source: https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/
 */
def call(body) {
    // evaluate the body block, and collect configuration into the object
    def pipelineParams= [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    body()

    pipeline {
        agent {
            label pipelineParams.nodes
        }
        stages {
            stage('Build') {
                steps {
                    script {
                        buildApplication(pipelineParams)
                    }
                }
            }
        }
    }
}

但是当我遇到以下错误时,此方法不起作用

这甚至可能吗?我知道我可以有一个单独的Groovy文件,并使用load函数加载int。但是,当您只需要一个包含所有构建指令的文件(Jenkinsfile)时,它就会更具吸引力。

0 个答案:

没有答案