我在GIT中拥有自己的代码库。代码库中有5个文件,即
我想只在文件2被更改的情况下触发jenkins构建。请注意,在构建被触发后,它应该拉动整个代码库。
我尝试使用poll SCM,但问题是如果存储库中的任何文件发生更改,则会触发构建。我想仅在文件2更改时触发它。
有可能吗?
答案 0 :(得分:1)
我将如何做到这一点。
Trigger builds remotely
。 这将以JENKINS_URL/job/MYJOB/build?token=TOKEN_NAME
的形式启用构建触发器URL。您必须自己指定令牌名称。
钩子的脚本通常在.git/hooks/post-receive
下。接收后挂钩在整个过程完成后运行,可用于更新其他服务或通知用户。
post-receive hook从stdin获取其参数,格式为<oldrev> <newrev> <refname>
。
您可以从新的HEAD提交中检索文件列表,如果它包含File2
,则只能继续执行下一步。这样的事情(未经测试):
#!/bin/bash
while read oldrev newrev refname
do
# list of changed files for a commit
filelist=$(git diff-tree --no-commit-id --name-only -r $newrev)
if [[ $filelist == *"File2"* ]]; then
# call the URL according to your build trigger config
fi
done
答案 1 :(得分:1)
在Jenkins中配置git checkout时,会有一个按钮来添加其他行为。其中一个选项是Polling ignores commits in certain paths
。我还没有真正使用它,但我的理解是,这将做你想要的。包含和排除有一个选项。我相信你会使用包含。
答案 2 :(得分:1)
是的,您需要安装FS trigeer插件,然后才能在jenkins配置中包括和排除
答案 3 :(得分:0)
我可以使用此插件来完成它,并且它像一个魅力一样工作。
您需要在Jenkins中安装通用Webhook插件插件,并在配置中提供以下值。
变量:更改文件
表达式:$ .commits []。['修饰','添加','已移除'] []
expressionType:JSONPath
在选项下: 文字:$ changed_files
表达式:路径/到/您的/文件