如何只部署修改过的/新的文件GIT+Jenkins+PHP


How to deploy only modified/new files GIT+Jenkins+PHP?

我正在尝试将Jenkins CI服务器用于我的PHP应用程序。由于我们使用我们的Git存储库,所以我使用詹金斯的Git插件从中央存储库中获取文件。

目前,当我的jenkins作业运行时,它从gitrepo&生成一个内部版本,但该内部版本包含所有文件。

根据我目前的情况,我只想在那个版本中修改+新文件。这样我就可以只部署它们,而不是整个文件。

这有可能吗。。或者它在构建环境中是根本错误的。。?

您需要两件事:提交上一个构建,然后提交上一次构建提交和当前HEAD之间更改的文件。

首先:可能有一些方法可以通过REST API找到来自Jenkins的提交(因为它确实会在构建页面中显示它。但我认为,如果你将git提交放入文件中并将其存档为构建工件,会更容易。然后,你可以使用Copy-build工件插件从以前的构建中获取文件。

第二:也许你可以使用gitdiff——name status HEAD

将所有这些联系在一起:

将构建设置为从同一作业复制工件,最后一次成功构建。

假设存储提交id的文件名为"commit_id",则设置一个构建步骤来运行以下内容:

git diff --name-status `cat commit_id` HEAD |
while read status file; do
    case $status in
    D)   echo "$file was deleted" ;; # deploy (or ignore) file deletion here
    A|M) echo "$file was added or modified" ;; # deploy file modification here
    esac
done
# record this commit to be archived
git describe > commit_id

在构建后操作中,将作业配置为归档文件commit_id。

这并没有什么"根本错误",但至少您的发布构建应该是"干净完整"的构建(而不是增量的)。

至于"如何"做到这一点。。。你必须自己去做。还没有见过这样的插件。为什么?因为在大多数已编译的"构建"中,源文件和相应的已编译文件之间不存在1对1的关系。系统如何知道哪些新文件产生了哪些新工件?(在PHP中,很明显,在其他语言中则不然)

你必须编写自己的构建脚本:

  • 分析控制台日志中的SCM更改,或直接查询SCM
  • Build
  • 根据步骤1中的解析,仅存档/打包/压缩更改的文件
  • 部署该文件子集