如何在另一个管道内运行调用共享库管道



我已经将一个管道编写为共享库,我想作为主管道的一个阶段进行调用,但我遇到了一个错误,可能没有定义节点。最好的方法是什么?在第二种情况下,我将sharedTest重写为标准管线;构建作业";不是调用共享库,而是在某些地方重复代码。因此,一般来说,我希望:sharedTest是一个独立的管道,但在某些地方也可以重用它,所以第一个管道很简单,因为我可以创建一个单独的管道,在那里导入lib,然后调用这样的lib方法。问题是当我想使用共享管道作为主管道的阶段时。

sharedTest.groovy:

def call() {
pipeline{
agent {
label "ansirobotSpy3-devel"
}
parameters {
choice(name: 'TEST', choices: ['bts1', 'bts2'], description: '')
string(name: 'PATH', defaultValue: '/bts1/, description: '')
}
environment {
HTTPS_PROXY = 'http://1.1.1.1'
HTTP_PROXY = 'http://1.1.1.1'
}
stages{
stage('Test stage'){
steps{
script {
sh "ls -lart ./*"
installPyLibs('pytest')
}
}
}
}
}
}

主管道:

...
stage("tests"){
agent none
options {
skipDefaultCheckout()
}
when{
beforeAgent true
allOf{
not { expression { currentBuild.result == 'ABORTED' } }
not { expression { SharedTest == 'true' } }
}
}
steps {
script {
stage ("Seek && Destoy") {       
sharedTest()

}
stage ("Deploy") {                            
def deploy = build job: 'Deploy',
parameters: [
string(name: 'BUILD_NUMBER', value: "${env.NEW_BUILD_NR_VAR}")
], wait: true, propagate: false
}
...
根据我的经验,Jenkins不允许在本地使用共享库。我用这种方式注册了我的共享库:
library identifier: 'LIBRARYNAME@BRANCH',
retriever: modernSCM([$class: 'GitSCMSource',
credentialsId: 'CREDENTIALS_FROM_JENKINS',
id: 'GUID',
remote: 'CLONE_LINK_TO_GIT_REPO',
traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait']]])

这也可以通过使用UI和注册库来实现。点击此处了解更多信息:https://www.jenkins.io/doc/book/pipeline/shared-libraries/

至于代码,我假设您的管道位于存储库中的vars文件夹中。(此处的详细信息:文件夹结构(。通过这种方式,在管道期间可以访问它们。

假设我有文件vars/internalStepTestEcho.groovy。加载库后,可以使用进行访问

internalStepTestEcho()

最新更新