如何仅部署修改过的/新的文件GIT + Jenkins + PHP?

Pee*_*ush 5 php git deployment jenkins

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

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

按照我目前的情况,我只想要该版本中的经过修改的新文件,因此我只能部署它们而不是整个文件。

这是否可能以某种方式出现?或者在构建环境中根本上是错误的?

sti*_*sti 4

您需要两件事:先前构建的提交,以及先前构建提交和当前 HEAD 之间更改的文件。

对于第一个:可能有多种方法可以通过 REST API 找到来自 Jenkins 的提交(因为它确实在构建页面中显示它)。但我认为如果将 git 提交放入文件并将其存档为构建工件。然后您可以使用复制构建工件插件从先前的构建中获取文件。

对于第二个:也许你可以使用 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
Run Code Online (Sandbox Code Playgroud)

在构建后操作中,配置作业以归档文件 commit_id。