我想在我们的管道库中添加timestamps()和colorizeOutput()功能。我在Jenkins 文档中找到了:wrappers {}
timestamps()
colorizeOutput()
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/xxxxx.groovy
要创建自己的构建步骤,请添加以下全局变量/vars/myOwnStep.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使用以下代码的文件:
/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(未经测试!)