如何在最后一次提交中更改Jenkins过滤器文件并通过FTP / SFTP

时间:2015-05-17 14:16:03

标签: git jenkins continuous-integration

我有Bitbucket私有存储库,我在服务器上安装了Jenkins。我配置了在使用push更新Bitbucket存储库时创建构建的项目。我还配置了“post built actions”以通过FTP / SFTP发送更新的文件。一切正常,除了Jenkins将整个站点发送到目标FTP帐户,无论我推送一个更改了一个文件的提交。

提一下,当我去项目/构建/更改时,它只列出已更改的文件。似乎'通过FTP发送构建工件'不知道这一点并发送整个工作区

project > settings > post build actions > send build artifacts over FTP > Transfer set > Source files我设置了**。我需要更改此值吗?

有人可以帮我设置Jenkins项目只上传更改的文件吗?上传2000个文件是荒谬的,而只添加/更改了几个文件。

1 个答案:

答案 0 :(得分:0)

为什么会这样?

  

Jenkins将整个站点发送到目标FTP帐户,无论我是否通过更改一个文件推送提交。

每次提交不仅仅是更改的文件。整个工作树(项目文件夹)的It's actually a snapshot。这可能是Jenkins发送整个项目而不仅仅是更改文件的原因。

如何仅过滤更改的文件?

有一种过滤文件的方法,由最后一次提交(或N次提交)更改。希望这有助于您制定最终解决方案。

这只显示已更改的文件:

git show --pretty="format:" --name-only HEAD

这应该复制它们:(由于操作系统不同,现在尝试移植它不适合我)

git log -1 --pretty=format:"%h" | xargs -I %id% git diff-tree --no-commit-id --name-only -r %id% | xargs -I % cp --parents % upd/

使用-number代替-1来搜索上次提交的次数。

在詹金斯做什么。

抱歉,还不知道配置Jenkins的确切方法。但那就是需要做的事情:

  1. 使用上述命令将更改的文件复制到项目之外的文件夹中。
  2. 让Jenkins通过FTP上传它们
  3. 清除文件夹以备将来重复使用。
  4. 此解决方案的部分内容来自ru.stackoverflow