如果仅更改特定文件,则触发 jenkins 构建

B.T*_*and 3 git github jenkins

我在 GIT 中有我的代码库。代码库中有 5 个文件,即

  • 文件 1
  • 文件 2
  • 文件 3
  • 文件 4
  • 文件5

我想仅在文件 2 更改时触发 jenkins 构建。请注意,在触发构建后,它应该拉取整个代码库。

我尝试使用 poll SCM,但问题是如果存储库中的任何文件发生更改,就会触发构建。我只想在文件 2 更改时触发它。

是否可以?

Mar*_*tin 5

这是我将如何做到的。

  1. 将您的 Jenkins 作业配置为Trigger builds remotely.

这将启用形式为 的构建触发器 URL JENKINS_URL/job/MYJOB/build?token=TOKEN_NAME。您必须自己指定令牌名称。

  1. 在你的 repo 上配置一个 git post-receive 钩子来调用那个触发器。

钩子的脚本通常在.git/hooks/post-receive. post-receive hook 在整个过程完成后运行,可用于更新其他服务或通知用户。

一个 post-receive 钩子从标准输入中获取它的参数,形式为<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
Run Code Online (Sandbox Code Playgroud)

有关 git 钩子的更多详细信息。


Rob*_*les 5

在 Jenkins 中配置 git checkout 时,有一个按钮可以添加其他行为。其中一种选择是Polling ignores commits in certain paths. 我还没有真正使用过它,但据我所知,这将满足您的需求。有包括和排除选项。我相信你只会使用包含。

  • 由于某种原因,我认为这对我不起作用......您能提供更多有关它的详细信息吗? (2认同)