2017-08-20 91 views
2

我们有很少的组件存储在他们自己的git仓库中。这些组件的特定组合是作为不同类型部署/客户的解决方案构建和交付的。所以,我们有一个管道git仓库,它有多个Jenkinsfile(具有不同的名称 - 所以构建名称)。如何使用Jenkins管道文件夹级共享库?

显然,这些管道之间有许多共同之处。我知道Jenkins共享库,当它们被赋予他们自己的git存储库时,它可以工作。但是,因为我的管道已经在专用的git存储库中,所以我很想知道如何使用“文件夹级共享库” - >https://jenkins.io/doc/book/pipeline/shared-libraries/#folder-level-shared-libraries

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

任何指向文档/示例 - 或指导方针如何去与此将不胜感激。

谢谢。

+0

你知道这是关于工作在Jenkins的一个文件夹里面,而不是从Git仓库的子目录加载代码,不是吗? – StephenKing

+0

不,我没有将我的计划归入文件夹下,所以我没有想到这种情况。感谢您的信息。现在;有什么Jenkins的特性可以让我的库在与管道定义相同的repo中使用? –

+0

IIRC你可以使用'library'步骤从那里加载。 – StephenKing

回答

1

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

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

假设jenkins/vars/log.groovy本地回购包含:

def info(message) { 
    echo "INFO: ${message}" 
} 

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

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: '[email protected]', retriever: modernSCM([$class: 'GitSCMSource', remote: repoPath]) 
} 

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