我正在尝试将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中的解析,仅存档/打包/压缩更改的文件
- 部署该文件子集