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

时间:2014-04-21 03:40:16

标签: php git deployment jenkins

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

目前,当我的jenkins工作运行时,它会从git repo&进行构建,但该构建包含所有文件。

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

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

2 个答案:

答案 0 :(得分:4)

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

第一种:可能有办法通过REST API从Jenkins中找到提交(因为它确实在构建页面中显示它。但我认为如果将git提交放入文件和存档会更容易它作为构建工件。然后您可以使用Copy Build artifacts插件从先前构建中获取文件。

对于第二个:也许你可以使用git diff --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 :(得分:0)

没有什么"根本错误"但是,至少你的发布版本应该是"干净完整"构建(非增量)。

至于"如何"这样做......你必须自己做。 Haven没见过像这样的插件。为什么?因为在大多数已编译的"版本"中,源文件和相应的编译文件之间没有一对一的关系。系统如何知道哪些新文件产生了哪些新工件? (在PHP中,它很清楚,在其他语言中,不是)

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

  • 解析控制台日志以获取SCM更改,或直接查询SCM。
  • 构建
  • 归档/打包/仅根据您在步骤1中的解析来压缩已更改的文件。
  • 部署该文件子集。