如何获取自上次在Jenkins / Hudson中构建以来已更改文件的列表

问题描述 投票:33回答:11

我已经设置了Jenkins,但是我想知道在当前版本和先前版本之间添加/更改了哪些文件。我想运行一些长时间运行的测试,具体取决于源树的某些部分是否被更改。

尽管已经有人建议使用SVN提交后钩子,但在Internet上搜寻时,我在Hudson / Jenkins中找不到提及此功能的信息。也许很简单,每个人(我除外)都知道该怎么做!

这可能吗?

hudson jenkins
11个回答
4
投票

如果正在轮询更改并使用SVN更新,CI服务器将显示更改列表。但是,您似乎想根据修改了哪些文件来更改构建的行为。我认为仅凭詹金斯(Jenkins)并没有开箱即用的方法。


0
投票

很简单,但这对我有用:


0
投票

我试图将其添加到注释中,但注释中的代码为no way


18
投票

我已经按照以下方式完成了。我不确定这是否是正确的方法,但似乎可行。您需要安装Jenkins Groovy插件并执行以下脚本。


5
投票
echo $SVN_REVISION
svn_last_successful_build_revision=`curl $JOB_URL'lastSuccessfulBuild/api/json' | python -c 'import json,sys;obj=json.loads(sys.stdin.read());print obj["'"changeSet"'"]["'"revisions"'"][0]["'"revision"'"]'`
diff=`svn di -r$SVN_REVISION:$svn_last_successful_build_revision --summarize`

4
投票

使用Build Flow


3
投票

您可以使用Jenkins Remote Access API来获取当前版本的机器可读说明,包括其完整更改集。此处的微妙之处在于,如果您配置了“安静期”,Jenkins可能会将对同一存储库的多次提交批处理到单个版本中,因此仅依靠一个修订号就显得有些天真。


2
投票

通过Groovy:


2
投票
#!/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;

2
投票

[使用Jenkins管道(支持API插件2.2或更高版本的管道),此解决方案对我有效:


0
投票

注意:您必须使用Jenkins自己的SVN客户端来获取更改列表。通过shell构建步骤执行此操作不会列出构建中的更改。

© www.soinside.com 2019 - 2024. All rights reserved.