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

目前,当我的jenkins作业运行时,它从git repo获取文件并进行构建,但该构建包含所有文件。

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

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

===============>>#1 票数: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。

===============>>#2 票数:0

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

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

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

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

  ask by Peeyush translate from so

未解决问题?本站智能推荐: