在JenkinsLib中为声明性JenkinsFile创建并使用全局阶段和步骤



我想有一些全局的JenkinsFile,可以用作我们使用的任何JenkinsFile中的阶段的库。具体来说,在使用JenkinsLib

的JenkinsFile中声明环境变量的阶段我们已经使用声明式JenkinsFile作为一个共享的JenkinsLib,我们有很多全局的JenkinsFiles,我们在各种类型的工作中使用。但在几乎所有的詹金斯全局文件中,我们都有相同的几个阶段。比如签出,初始化等等。我想要一些全局舞台库文件我可以在我们为JenkinsLib创建的任何JenkinsFiles中使用它

为例,具体地说,我们有一个"init"阶段,声明几个ENV和Global参数。所以我创建了一个" getgloabalstage。groovy" Like -

// Init stage
def initStage = "
env.STARTED_BY = buildInfo.getStartedByUser()
env.SVN_REVISION = shell.getCommandOutput("svn info --show-item last-changed-revision")
env.SVN_AUTHOR = scmExtras.getEmailsFromChangeList().join(",")
env.PRODUCT_VERSION = versionHelper.getMainVersion()
def timeInSeconds = (long) (currentBuild.startTimeInMillis / 1000)
env.TEST_REPORT = "TestsResults_${currentBuild.number}.xml"
currentBuild.description = "${env.STARTED_BY} on ${env.NODE_NAME}, ${env.PRODUCT_VERSION} - r.${env.SVN_REVISION}"
buildInfo.printBuildInfo()
"
// svn checkout stage
def svnCheckoutStage = "svn.checkout("${env.REPO_NAME}","${env.BRANCH_NAME}")"
// generate stage
def generateStage(stageRequested) {
stageToRun = "${stageRequested}Stage"
return {
"echo "Gloabl Stage ${stageRequested}"
${stageToRun}
"
}
}

然后我尝试在其他JenkinsFile中使用它,比如

stages {
stage('Init') {
steps{
script {
getGloabalStage.generateStage("init")
}
}
}
stage ('Checkout'){
steps{
script {
getGloabalStage.generateStage("svnCheckout")
}
}
}

但是"init"舞台不起作用。我尝试了几个选项"和但它没有工作

我还试着把"stage ->一步→script"但是我们使用声明式的JenkinsFile,所以它在调用JenkinsFile时不接受它。

我还尝试使用initStage作为一个函数并调用它,但也没有成功。

当前我得到的错误-

2:除了" n ";不管怎样,我在第2行,第63列找到了。= buildInfo.getStartedByUser ()

所以,最重要的是,我需要在声明性JenkinsFile中有一些全局位置,在那里我可以定义全局阶段和步骤,这些阶段和步骤可以声明全局变量,并在包含和执行它的JenkinsFile中定义参数。

你可以试试

def setVars() {
env.STARTED_BY = buildInfo.getStartedByUser()
env...
}
def svnCheckout() {
svn.checkout("${env.REPO_NAME}", "${env.BRANCH_NAME}")
}

称它们为

stages {
stage('Init') {
steps{
script {
getGloabalStage.setVars()
}
}
}
stage ('Checkout'){
steps{
script {
getGloabalStage.svnCheckout()
}
}
}
}

最新更新