2014-04-21 84 views
2

我想为我的PHP应用程序使用Jenkins CI服务器。因为我们正在使用我们的Git存储库,所以我使用jenkins的git插件从中央仓库获取文件。如何部署只修改/新文件GIT + Jenkins + PHP?

当前,当我的詹金斯作业运行时,它从git回购文件&进行构建,但构建包含所有文件。

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

这是可能以某种方式..或它在构建环境中根本错误..?

回答

3

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

第一种:可能有许多方法可以通过REST API找到Jenkins提交的内容(因为它会在构建页面中显示它,但我认为将git提交到文件中会更容易, 。存档作为构建神器然后你可以使用复制文物构建插件来获得从以前的版本的文件

对于第二个:也许你可以使用git的差异--name状态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。

0

在这方面没有什么“根本错误”,但至少你的发布版本应该是“干净整版”版本(而不是增量版本)。

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

你必须写自己的编译脚本,将:

  • 解析控制台日志SCM变化,或直接查询SCM。
  • 构建
  • 存档/封装/邮编只有那些在步骤1中
  • 部署文件的子集改变,根据您解析的文件。