Jenkins 在生成后脚本中获取生成状态

Jenkins 在生成后脚本中获取生成状态,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我希望有一个后期构建钩子或类似的东西,这样我就可以有与e相同的输出。GIRC插件,但将其交给脚本。 我能够得到所有的信息,除了实际的构建状态。这根本不起作用,无论是作为“构建后脚本”、“构建后任务”、“参数化触发器”aso都不起作用 有一些非常丑陋的解决办法是可能的,但我想问一下,万一有人有更好的选择。。。除了编写自己的插件之外。在后期构建步骤via中使用Groovy脚本。然后,您可以通过访问Jenkins内部构件。该插件为脚本提供了变量管理器,可用于访问API的重要部分(请参阅插件文档中的用法

我希望有一个后期构建钩子或类似的东西,这样我就可以有与e相同的输出。GIRC插件,但将其交给脚本。 我能够得到所有的信息,除了实际的构建状态。这根本不起作用,无论是作为“构建后脚本”、“构建后任务”、“参数化触发器”aso都不起作用


有一些非常丑陋的解决办法是可能的,但我想问一下,万一有人有更好的选择。。。除了编写自己的插件之外。

在后期构建步骤via中使用Groovy脚本。然后,您可以通过访问Jenkins内部构件。该插件为脚本提供了变量管理器,可用于访问API的重要部分(请参阅插件文档中的用法部分)

例如,您可以在Windows上执行一个简单的外部Python脚本,并将其结果(以及构建结果)输出到构建控制台:

def command =  """cmd /c python -c "for i in range(1,5): print i" """
manager.listener.logger.println command.execute().text

def result = manager.build.result
manager.listener.logger.println "And the result is: ${result}"

它与Groovy后期构建插件一样工作,但在执行的字符串中没有任何额外的引号。因此,我必须将实际的功能放入一个shell脚本中,该脚本调用curl,然后需要引用POST参数aso

def result = manager.build.result
def build_number = manager.build.number
def env = manager.build.getEnvironment(manager.listener)
def build_url = env['BUILD_URL']
def build_branch = env['SVN_BRANCH']
def short_branch = ( build_branch =~ /branches\//).replaceFirst("")
def host = env['NODE_NAME']
def svn_rev = env['SVN_REVISION']
def job_name = manager.build.project.getName()


"/usr/local/bin/skypeStagingNotify.sh Deployed ${short_branch} on ${host} - ${result} - ${build_url}".execute()
试试插件


它允许您根据日志输出指定条件…

为此,我非常喜欢该插件。它非常灵活,您可以根据构建失败或成功选择要采取的操作。例如,我使用条件构建步骤发送构建失败通知:


您还可以使用条件构建步骤设置环境变量或写入日志文件,以便在后续的“执行shell”步骤中使用。因此,例如,您可以创建一个包含三个步骤的构建:一个步骤编译代码/运行测试,另一个步骤设置一个
STATUS=“failed”
环境变量,然后第三个步骤发送一封电子邮件,如
构建完成时的状态:${STATUS}

非常简单的解决方案,可能不是很优雅,但它可以工作

1:捕获所有要捕获的构建结果(在本例中为成功)

2:注入一个带有作业状态值的env变量

3:对任何类型的其他状态都执行相同的操作(在本例中,我捕获从中止到不稳定)

4:之后你就可以用这个值做任何你想做的事了。。在这种情况下,我将它传递给ANT脚本!(或者您可以直接从ANT将其作为环境变量加载…)

希望能有帮助

基本解决方案(请不要笑)

在哪里

$UPSTREAM\u BUILD\u DIR=$JOB\u NAME

$UPSTREAM_BUILD_NR=$BUILD_NUMBER

通过上游构建

当然“/var/lib/jenkins/jobs/”取决于jenkins的安装情况

Groovy脚本解决方案:- 在这里,我使用获取构建状态并将其设置为环境变量,因此可以使用在构建后脚本中使用环境变量

Groovy脚本:-

import hudson.EnvVars
import hudson.model.Environment

def build = Thread.currentThread().executable
def result = manager.build.result.toString()  
def vars = [BUILD_STATUS: result]

build.environments.add(0, Environment.create(new EnvVars(vars)))
附言:-

echo BUILD_STATUS="${BUILD_STATUS}"

谢谢,听起来很好。可以从那里调用外部工具(如脚本)吗?这似乎可行,但命令的输出没有打印出来。忘记提到:
cmd/c
适用于windows。在类Unix系统上,我认为您需要省略它。生成结果的打印输出如何?生成结果很好,但命令似乎没有执行。我想windows cmd。。。问题似乎在于引用命令。当我省略引号时,它是有效的,但是我需要为我实际想要发送的命令使用引号。有没有一种方法可以对bash脚本执行类似的操作?我的意思是获取构建状态。如果shell命令中有错误,则不会打印任何内容。要打印它,请参阅,要在Groovy中执行包含引号/空格的字符串,最好使用
echo BUILD_STATUS="${BUILD_STATUS}"