我正在尝试将Jenkins CI服务器用于我的PHP应用程序。因为我们正在使用我们的Git存储库,所以我使用jenkins的git插件从中央存储库获取文件。
目前,当我的jenkins工作运行时,它会从git repo&进行构建,但该构建包含所有文件。
根据我目前的情况,我只想在该版本中修改+新文件。所以我只能部署它们而不是整个文件。
这是否可能......或者在构建环境中它是根本错误的。?
答案 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中,它很清楚,在其他语言中,不是)
您必须编写自己的构建脚本: