首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JenkinsFile中为声明性JenkinsLib创建和使用全局阶段和步骤

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

Stack Overflow用户
提问于 2022-07-12 07:37:52
回答 1查看 43关注 0票数 0

我希望有一些全局JenkinsFile,可以在我们使用的任何JenkinsFile中作为一个库使用。具体而言,在使用该JenkinsFile的JenkinsLib中声明环境变量的阶段。

我们已经使用声明式JenkinsFile作为共享JenkinsLib,我们在各种乔布斯中都使用了大量的Gloabl JenkinsFiles。但在几乎所有的全球JenkinsFiles中,我们都有相同的几个阶段。例如结帐、init等,我希望有一些全局阶段库文件,可以在我们为JenkinsFiles创建的任何一个JenkinsLib中使用。

例如,具体来说,我们有一个"init“阶段,它宣布了几个ENV和Global。所以我创造了一个"getGloabalStage.groovy“就像-

代码语言:javascript
复制
// 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中使用它,比如

代码语言:javascript
复制
stages {
    stage('Init') {
        steps{
            script {
                getGloabalStage.generateStage("init")
            }
        }
    }
    stage ('Checkout'){
        steps{
            script {
                getGloabalStage.generateStage("svnCheckout")
            }
        }
    }

但"init“阶段行不通。我尝试了几个选项“和\但它没有工作”

我还尝试将"stage -> step ->脚本“放入其中,但我们使用了声明式jenkinsFile,因此它在调用JenkinsFile时不接受它。

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

目前我所犯的错误-

2:除了“‘\n’”之外,什么都期待得到,无论如何,@第2行,第63栏。= buildInfo.getStartedByUser()

因此,说到底,我需要在声明式JenkinsFile中有一些全局位置,在这里我可以定义全局阶段和步骤,这些步骤可以声明全局变量,并在包含和执行它的JenkinsFile中定义参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-12 08:31:36

你可以尝试这样的方法

代码语言:javascript
复制
def setVars() {
    env.STARTED_BY = buildInfo.getStartedByUser()
    env...
}

def svnCheckout() {
    svn.checkout("${env.REPO_NAME}", "${env.BRANCH_NAME}")
}

打电话给他们

代码语言:javascript
复制
stages {
    stage('Init') {
        steps{
            script {
                getGloabalStage.setVars()
            }
        }
    }
    stage ('Checkout'){
        steps{
            script {
                getGloabalStage.svnCheckout()
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72948645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档