在构建后的脚本中获取构建状态

时间:2012-06-20 18:11:37

标签: jenkins jenkins-plugins

我想有一个post-build钩子或者类似的,所以我可以拥有与e相同的输出。 G。 IRC插件,但将其提供给脚本。 除了实际构建状态之外,我能够获得所有信息。这不起作用,既不作为“后构建脚本”,“构建后任务”,“参数化触发器”aso。

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

7 个答案:

答案 0 :(得分:8)

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

例如,以下是如何在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}"

答案 1 :(得分:8)

它的工作原理与Groovy Post-Build插件一样,但在执行的字符串中没有任何额外的引用。所以我不得不把实际的功能放到一个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()

答案 2 :(得分:3)

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

enter image description here

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

答案 3 :(得分:3)

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

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

2:注入一个以作业状态值

的env变量

Step 1

3:对任何其他状态执行相同操作(在这种情况下,我从中止到不稳定)

enter image description here

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

enter image description here

希望它可以提供帮助!

答案 4 :(得分:1)

试试Post Build Task插件......

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

答案 5 :(得分: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 /”取决于您安装的jenkins

答案 6 :(得分:0)

Groovy脚本解决方案:-

这里我使用groovy script plugin来获取构建状态并将其设置为环境变量,因此可以在使用post-build task plugin的构建后脚本中使用该环境变量。

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}"