我已经将一个管道编写为共享库,我想作为主管道的一个阶段进行调用,但我遇到了一个错误,可能没有定义节点。最好的方法是什么?在第二种情况下,我将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
}
...
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()