16

我想要一个构建后的钩子或类似的东西,这样我就可以有与例如 IRC 插件相同的输出,但是把它交给一个脚本。我能够获得所有信息,除了实际的构建状态。这只是不起作用,也不是“构建后脚本”、“构建后任务”、“参数化触发器”。

有一些非常丑陋的解决方法是可能的,但我想问一下,以防有人有更好的选择......没有编写我自己的插件。

4

7 回答 7

9

它与 Groovy Post-Build Plugin 中提到的一样工作,但在执行的字符串中没有任何额外的引用。所以我不得不将实际功能放入一个 shell 脚本中,该脚本调用 curl,这反过来也需要引用 POST 参数。

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()
于 2012-08-22T15:31:34.123 回答
8

通过Groovy Post-Build 插件在后期构建步骤中使用 Groovy 脚本。然后,您可以通过Jenkins Java API访问 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}"
于 2012-06-20T21:36:09.880 回答
5

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

在此处输入图像描述

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

于 2017-04-19T00:43:15.597 回答
5

非常简单的解决方案,也许不优雅,但它有效!

1:捕获所有你想捕获的构建结果(在本例中为 SUCCESS)。

2:注入一个以作业状态为值的环境变量

第1步

3:对任何其他状态做同样的事情(在这种情况下,我从中止到不稳定)

在此处输入图像描述

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

在此处输入图像描述

希望它可以帮助!

于 2017-05-04T14:07:14.463 回答
1

Groovy 脚本解决方案:-

在这里,我使用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}"
于 2019-10-10T11:47:44.810 回答
0

尝试构建后任务插件...

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

于 2013-03-20T10:27:54.283 回答
0

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

#!/bin/bash
STATUS='Not set'
if [ ! -z $UPSTREAM_BUILD_DIR ];then
  ISFAIL=$(ls -l /var/lib/jenkins/jobs/$UPSTREAM_BUILD_DIR/builds | grep "lastFailedBuild\|lastUnsuccessfulBuild" | grep $UPSTREAM_BUILD_NR)
  ISSUCCESS=$(ls -l /var/lib/jenkins/jobs/$UPSTREAM_BUILD_DIR/builds | grep "lastSuccessfulBuild\|lastStableBuild" | grep $UPSTREAM_BUILD_NR)
  if [ ! -z "$ISFAIL" ];then
     echo $ISFAIL
     STATUS='FAIL'
  elif [ ! -z "$ISSUCCESS" ]
  then
     STATUS='SUCCESS'
  fi
fi
echo $STATUS

在哪里

$UPSTREAM_BUILD_DIR=$JOB_NAME

$UPSTREAM_BUILD_NR=$BUILD_NUMBER

从上游构建传递

当然“/var/lib/jenkins/jobs/”取决于你的詹金斯安装

于 2019-01-25T11:21:00.913 回答