![](/img/trans.png)
[英]BitBucket+Jenkins: Trigger build only when specific branch is changed
[英]Trigger jenkins build if only a specific file is changed
我在 GIT 中有我的代码库。 代码库中有 5 个文件,即
我只想在文件 2 更改时触发 jenkins 构建。请注意,在触发构建后,它应该拉取整个代码库。
我尝试使用 poll SCM,但问题是如果存储库中的任何文件发生更改,就会触发构建。我只想在文件 2 更改时触发它。
是否可以?
这是我将如何做到的。
Trigger builds remotely
。 这将启用JENKINS_URL/job/MYJOB/build?token=TOKEN_NAME
形式的构建触发器 URL。 您必须自己指定令牌名称。
钩子的脚本通常在.git/hooks/post-receive
。 post-receive hook 在整个过程完成后运行,可用于更新其他服务或通知用户。
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
当您在 Jenkins 中配置 git checkout 时,有一个按钮可以添加其他行为。 这些选项之一是Polling ignores commits in certain paths
。 我还没有真正使用过它,但据我所知,这将满足您的需求。 有包括和排除选项。 我相信你只会使用包含。
是的,您需要安装 FS trigeer 插件,然后您可以在 jenkins 配置中包含和排除
我能够使用这个插件来做到这一点,它就像一个魅力。
您需要在 Jenkins 中安装插件 Generic Webhook Plugin 并在配置中提供以下值。
变量:changed_files
表达式 : $.commits[ ].['modified',' added','removed'][ ]
表达式类型:JSONPath
在选项下:文本:$changed_files
表达式:路径/到/你的/文件
在我开始之前,您可能应该在 github 操作中执行此操作,这将非常简单,除非像我一样您被迫使用 Jenkins,否则这适合您。
因此,在对这个答案进行了一些搜索之后,我能够使用通用 webhook trigger来完成它,这是我上面获得 0 票的评论,我将尝试更清楚地了解这个过程:
调试:
Github 在这方面实际上很棒,一旦您配置了 webhook,您就可以看到发送给 Jenkins 的每个 POST 并看到 Jenkins 的响应。 在通用 webhook 触发器文档中也有很好的例子。
笔记:
注意不同的 github 动作有不同的有效载荷:一个 PR 动作不会有任何修改过的文件数组等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.