Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅部署修改/新文件GIT+;詹金斯&x2B;PHP?_Php_Git_Deployment_Jenkins - Fatal编程技术网

如何仅部署修改/新文件GIT+;詹金斯&x2B;PHP?

如何仅部署修改/新文件GIT+;詹金斯&x2B;PHP?,php,git,deployment,jenkins,Php,Git,Deployment,Jenkins,我正在尝试将Jenkins CI服务器用于我的PHP应用程序。因为我们正在使用我们的Git存储库,所以我使用jenkins的Git插件从central repo获取文件 当前,当我的jenkins作业运行时,它从git repo获取文件并生成一个构建,但该构建包含所有文件 根据我目前的情况,我只希望在那个版本中有修改过的+新文件,这样我就可以只部署它们,而不是全部文件 这是可能的……还是在构建环境中是根本错误的?这并没有什么“根本错误”,但至少您的发布构建应该是“干净完整”的构建(而不是增量的)

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

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

根据我目前的情况,我只希望在那个版本中有修改过的+新文件,这样我就可以只部署它们,而不是全部文件

这是可能的……还是在构建环境中是根本错误的?

这并没有什么“根本错误”,但至少您的发布构建应该是“干净完整”的构建(而不是增量的)

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

您必须编写自己的构建脚本,该脚本将:

  • 分析控制台日志中的SCM更改,或直接查询SCM
  • 建造
  • 根据步骤1中的解析,仅存档/打包/压缩已更改的文件
  • 部署该文件的子集

您需要两件事:提交上一个构建,然后提交上一个构建和当前头之间更改的文件

首先:可能有办法通过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
在生成后操作中,将作业配置为归档文件提交id