jenkins插件,用于在给定目录中更改任何文件时触发构建

时间:2013-04-17 07:33:37

标签: jenkins hudson jenkins-plugins hudson-plugins

我正在寻找功能,我们有一个包含一些文件的目录。

每当任何人对目录中的任何文件进行更改时,jenkins shoukd都会触发构建。

此功能是否有任何插件或方法。请指教。

提前致谢。

2 个答案:

答案 0 :(得分:4)

我自己没有尝试过,但FSTrigger插件似乎可以做你想要的:

  

FSTrigger提供监视文件系统的轮询机制   如果文件或一组文件已更改,则触发构建。

如果您可以使用脚本监控目录,则可以使用HTTP GET触发构建,例如使用wgetcurl

wget -O- $JENKINS_URL/job/JOBNAME/build 

答案 1 :(得分:1)

虽然有点相关..似乎这个问题是关于监视系统上的静态文件..但是有很多版本控制系统就是为了这个目的。

如果您使用git跟踪文件本身的更改,我在another post中回答了此问题:

#!/bin/bash

set -e

job_name="whatever"
JOB_URL="http://myserver:8080/job/${job_name}/"
FILTER_PATH="path/to/folder/to/monitor"

python_func="import json, sys
obj = json.loads(sys.stdin.read())
ch_list = obj['changeSet']['items']
_list = [ j['affectedPaths'] for j in ch_list ]
for outer in _list:
  for inner in outer:
    print inner
"

_affected_files=`curl --silent ${JOB_URL}${BUILD_NUMBER}'/api/json' | python -c "$python_func"`

if [ -z "`echo \"$_affected_files\" | grep \"${FILTER_PATH}\"`" ]; then
  echo "[INFO] no changes detected in ${FILTER_PATH}"
  exit 0
else
  echo "[INFO] changed files detected: "
  for a_file in `echo "$_affected_files" | grep "${FILTER_PATH}"`; do
    echo "    $a_file"
  done;
fi;

您可以将检查直接添加到作业的exec shell的顶部,如果没有检测到更改,它将exit 0。因此,您始终可以轮询回购的顶层以进行签入以触发一个构建。并且只有在相关文件发生变化时才能完成构建。