当前位置: 首页 > 面试题库 >

Jenkinsfile中的通用包装器

从元明
2023-03-14
问题内容

我想在我们的管道库中添加timestamps()colorizeOutput()功能。我在Jenkins
文档中找到了:wrappers {}

job('example') {
    wrappers {
        colorizeOutput()
        timestamps()
    }
}

我不知道如何向包装库中添加包装器,如下所示:

// file ..src/helpers/Builder.groovy

package helpers.sw_main

def doSomething() {
    // some Groovy stuff here
}

def doSomethingElse() {
    // do something else
}

我们的工作流程如下所示:

#!/usr/bin/env groovy

// this is our library with custom methods
@Library('ext-lib')
def builder = new helpers.Builder()

node {
    try {

        stage('Some Stage') {
            builder.doSomething()
        }
    }

    catch (err) {
        throw err
    }
}

因此,我想将时间戳和ansi-colors添加到库中的每个函数中。当然,我可以通过包装每个函数来做到这一点

timestamps() {
    colorizeOutput() {
        // function body
    }
}

但是它有点愚蠢。

那么我可以轻松地包装管道或库吗?


问题答案:

解决您的问题的一种方法是使用全局变量/vars/xxxxx.groovy)。

要创建自己的构建步骤,请添加以下全局变量/vars/myOwnStep.groovy

def call(STAGE_NAME, Closure closure) {
    // do something

    // return something if you like to
}

你可以这样叫

myOwnStep("Step-name") {
    // what ever you want to do
}

在管道脚本中。

另一种可能性是“覆盖” sh 步骤。因此,创建一个/vars/sh.groovy使用以下代码的文件:

def call(String script, String encoding=null, String label=null, boolean returnStatus=null, boolean returnStdout=null) {
    timestamps {
        return steps.sh(script: script, endoding: encoding, label: label, returnStatus: returnStatus, returnStdout: returnStdout)
    }
}

def call(Map params = [:]) {
    return call(params.script, params.get('encoding', null), params.get('label', null), params.get('returnStatus', false), params.get('returnStdout', false)) 
}

(这也可以用于其他步骤,但是参数必须匹配。)

我刚刚添加了带有一些示例的GitHub存储库:https
:
//github.com/datze/jenkins_shared_library(未经测试!)



 类似资料:
  • 问题内容: 我正在尝试在Jenkinsfile中使用 通过SSH发布 插件。但是,我在方法中遇到了异常。这是我的代码: 如何摆脱异常? 问题答案: 这是因为某些变量不可序列化。 来自文件 由于管道必须在Jenkins重新启动后才能幸免,因此正在运行的程序的状态会定期保存到磁盘,以便以后可以恢复(保存在每个步骤之后或在步骤的中间进行,例如)。 您可以使用注释进行创建,使用

  • 我正在尝试在 Jenkinsfile 中使用 Publish over SSH 插件。但是,我在 方法中得到了异常 。这是我的代码: 我怎样才能消除异常?

  • 问题内容: 我正在处理jenkinsfile,在第三阶段遇到异常: 我一直在阅读它,我知道我无法创建不可序列化的变量。因此,我认为这必须与我的代码的这一部分有关: 我的问题是,如何定义两个变量以避免该异常? 问题答案: 您的问题是这一行: 该是Groovy的查找操作。它返回一个实例,不是。如果Jenkins在将结果存储在本地变量中后决定将脚本存储在Jenkins序列化的本地变量中,即在您获取异常之

  • 本文向大家介绍详解Django通用视图中的函数包装,包括了详解Django通用视图中的函数包装的使用技巧和注意事项,需要的朋友参考一下 用函数包装来处理复杂的数据过滤 另一个常见的需求是按URL里的关键字来过滤数据对象。 之前,我们在URLconf中硬编码了出版商的名字,但是如果我们想用一个视图就显示某个任意指定的出版商的所有书籍,那该怎么办呢? 我们可以通过对 object_list 通用视图进

  • 问题内容: 在jenkinsfile,我已经通过指定的文件夹名 SparseCheckoutPaths 我想结帐。但是我却得到了整个分支结帐。 问题答案: 这是我自己的问题的答案。关于它如何工作的一些背景知识,有一个名为 sparsecheckout的 git客户端标志/配置,负责这种签出。此外,还需要一个 稀疏签出的 命名文件。 我的问题是 Jenkinsfile 的语法,正确的语法如下: 有关

  • 问题内容: 我在Mac OS 10.6.4下运行Python 2.7,并且刚刚从二进制文件安装了wxPython 。我的Python脚本中出现了一个奇怪的错误。仅供参考,我可以从PyCrust导入wx模块。我真的看不到我在这里做错了什么。谁能帮忙吗? 问题答案: 看来,附带的wxPython 2.7 DMG C扩展模块这里是仅32位。 不幸的是,它不能准确指示Python正在运行的OS X多种体系