如何使用Jenkins Pipeline文件夹级共享库?

R K*_*een 8 jenkins jenkins-pipeline

我们有很少的组件存储在他们自己的git存储库中.这些组件的特定组合是作为不同类型的部署/客户的解决方案构建和提供的.因此,我们有一个管道git存储库,它有多个Jenkinsfile(具有不同的名称 - 以及构建名称).

显然,这些管道之间存在许多共同点.我知道Jenkins共享库,当它们被赋予自己的git存储库时它会工作.但是,由于我的管道已经在专用的git存储库中,我很想知道如何使用这里解释的"文件夹级共享库" - > https://jenkins.io/doc/book/pipeline/shared-libraries /#文件夹级共享的库

但是,我无法弄清楚如何使用这个文件夹级别的共享库.我找不到这种库的任何示例/文档.

任何指向文档/示例的指针 - 或者如何使用它的指南将非常感激.

谢谢.

Paw*_*cha 5

我想正确的方法是实现自定义SCMRetriever和使用library步骤。

但是,您可以使用以下技巧:

假设您的本地存储库jenkins/vars/log.groovy中包含:

def info(message) {
    echo "INFO: ${message}"
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下步骤Jenkinsfile从目录加载该共享库:jenkins/library

node('node1') { // load library
    checkout scm
    // create new git repo inside jenkins subdirectory
    sh('cd jenkins && git init && git add --all . && git commit -m init &> /dev/null') 
    def repoPath = sh(returnStdout: true, script: 'pwd').trim() + "/jenkins"
    library identifier: 'local-lib@master', retriever: modernSCM([$class: 'GitSCMSource', remote: repoPath])
}

node('node2') {
    stage('Build') {
        log.info("called shared lib") // use the loaded library
    }
}
Run Code Online (Sandbox Code Playgroud)