5

我正在尝试编写一个共享库,它结合了全局变量和共享函数来为我们的项目执行构建和部署的自动化任务

项目布局如下:

在此处输入图像描述

该项目有两个主要部分:

  1. 放置在 vars 文件夹中的全局共享变量

  2. 支持 groovy 脚本以抽象逻辑,这些逻辑又将在全局变量中调用。

在此处输入图像描述

在 groovy 类中,我使用println记录调试信息

在此处输入图像描述

但是当它通过詹金斯管道作业调用时,它从未被打印出来

在此处输入图像描述

jenkins job的日志控制台如下:

在此处输入图像描述

有人可以告诉我如何将日志从 groovy 类传播到 jenkins 作业控制台,因为我只能看到全局共享脚本中来自println的日志显示在日志控制台中。

4

3 回答 3

7

我刚刚找到了一种方法,方法是调用jenkins 作业中可用的println步骤

基本上我在 Groovy 类PhoenixEurekaService中创建了一个包装函数,如下所示:

在此处输入图像描述

步骤其实就是通过构造函数传入Groovy类的jenkins作业环境。通过这种方式,我们可以在 Groovy 类中调用 jenkins 作业中可用的任何步骤。

在此处输入图像描述

在全局 groovy 脚本PhoenixLib.groovy

在此处输入图像描述

我不确定是否有其他方法可以做到这一点......

于 2017-11-16T02:32:21.360 回答
3

无法从共享库访问所有命令/DSL,例如:println、sh、bat、checkout 等。参考:https://jenkins.io/doc/book/pipeline/shared-libraries/

您可以通过将步骤传递给共享库来访问它们。

//your library
package org.foo
class Utilities implements Serializable {
  def steps
  Utilities(steps) {this.steps = steps}
  def mvn(args) {
    steps.println "Hello world"
    steps.echo "Hello echo"
    //steps.sh "${steps.tool 'Maven'}/bin/mvn -o ${args}"
  }
} 

詹金斯文件

@Library('utils') import org.foo.Utilities
def utils = new Utilities(this)
node {
  utils.mvn '!!! so this how println can be worked out or any other step!!'
}
于 2018-05-29T05:55:27.807 回答
0

我不是 100% 确定这是否是您要查找的内容,但是可以通过传递步骤并使用echo. 请参阅https://jenkins.io/doc/book/pipeline/shared-libraries/中的访问步骤

于 2017-12-20T09:42:16.720 回答