jenkins+php+svn快速部署测试环境开发环境快速部署

jenkins 虽然作为java常用的打包部署工具,不过也可以使用在phpweb项目部署管理,前段时间帮公司部署了开发环境与测试环境,简单分享一下。

1、内网web环境搭建lnmp,centos下编译安装或者yum安装 google有很多资料,这里就不赘述了

2、nginx配置dev域名指向开发环境代码目录,svn设定钩子开发人员有更新后自动svn up更新开发环境代码

       可参考http://www.360doc.com/content/14/0903/23/13647213_406884443.shtml

3、nginx配置test域名指向测试环境代码目录

4、服务器配置java环境后,下载jenkins,http://pkg.jenkins-ci.org/redhat-stable/  war包

直接java -jar jenkins.war启动jenkins,不需要安装啥tomcat(可将此命令加入开机自动启动配置)

5、建立jenkins任务,添加打包脚本,每次构建生成增量更新包与全量更新包,如下:

一、新建一个自由风格项目

二、配置svn

三、定时构建

这个定时是每天12点01分跟18点05分构建一下

四、设置shell打包脚本

[plain] view plain copy
 
  1. cd /root/.jenkins/workspace  
  2. #find need update file  
  3. find  project_name    -mmin -1 | grep -v ".svn"  > svn.log #jenkins构建后查找1分钟内有修改的文件  
  4. #clear history  
  5. rm -rf pakage/*  
  6. #cope auto file  
  7. /usr/local/php/bin/php makeAutoPk.php #将有修改文件打包,打包脚本下面有参考  
  8. #zip auto file to target path  
  9. cd pakage/<span style="font-family: Arial, Helvetica, sans-serif;">project_name</span><span style="font-family: Arial, Helvetica, sans-serif;">/</span>  
  10. datestr=$(date +%Y%m%d%H%M)  
  11. targetpath="/home/hn/update_code/"#更新放置的目录  
  12. mkdir ${targetpath}${datestr}  
  13. filename="/auto.zip"  
  14. zip -r ${targetpath}${datestr}${filename} .  
  15. #cp all file  
  16. cd ..  
  17. cp -a ../shop_test all  
  18. #delete nouse file  
  19. find all -name .svn|xargs rm -rf#删除svn更新文件  
  20. cd all  
  21. #删除不需要打包的文件  
  22. rm -rf temp  
  23. rm -rf images  
  24.   
  25.   
  26. #zip all file to target path  
  27. zip -r ${targetpath}${datestr}/all.zip .  
  28.   
  29. #update解压增量包覆盖  
  30. unzip -o ${targetpath}${datestr}/auto.zip -d  test_path#test_path为测试环境代码目录  
[plain] view plain copy
 
  1. </pre>makeAutoPk,php脚本<p></p><p></p><pre name="code" class="php"><?php  
  2. /**  
  3.  * 制作增量包  
  4.  */  
  5. $fileClass = new FileStatic();  
  6. $fileClass->makePackege();  
  7.   
  8. class FileStatic   
  9. {     
  10.   
  11.     public $targetPath;//目标路径  
  12.     public $fileArr;//需要打包文件日志  
  13.     public $deleteFile;//删除的文件  
  14.     public $projectName;//项目名称  
  15.     public $sourcePath;//代码源  
  16.     public function __construct($projectName = 'shop'){  
  17.         $this->projectName = $projectName;  
  18.         $log = file_get_contents('svn.log');  
  19.         $this->fileArr = explode(" ", trim($log));  
  20.         $this->deleteFile = array();  
  21.         $this->targetPath = __DIR__.'/pakage/'.date('Ymdhms',time());  
  22.         $this->sourcePath = __DIR__;  
  23.         if( !is_dir ($this->targetPath)) $this->mkdirs($this->targetPath,0775);  
  24.     }  
  25.     //打包  
  26.     public function makePackege(){  
  27.         if(empty($this->fileArr)){  
  28.             echo "no file to make";  
  29.             exit;  
  30.         }  
  31.         foreach($this->fileArr as $file){  
  32.             $targetFile = $this->targetPath.'/'.$file;  
  33.             if(is_dir($file)){//文件夹  
  34.                 if( !is_dir ($targetFile)) $this->mkdirs($targetFile,0775);  
  35.             }elseif(is_file($file)){//文件  
  36.                 $folderName = dirname($targetFile);  
  37.                 if( !is_dir ($folderName)) $this->mkdirs($folderName,0775);  
  38.                 copy($this->sourcePath.'/'.$file,$targetFile);  
  39.             }elseif(!file_exists($file)){//不存在的文件夹  
  40.                 $this->deleteFile[] = $file;  
  41.             }  
  42.         }  
  43.     }  
  44.   
  45.     /**  
  46.      * 创建目录  
  47.      */  
  48.     private function mkdirs($dir, $mode = 0775){  
  49.         if (is_dir($dir) || @mkdir($dir, $mode)){  
  50.             return true;  
  51.         }  
  52.         if (!$this->mkdirs(dirname($dir), $mode)){  
  53.             return false;  
  54.         }  
  55.         return @mkdir($dir, $mode);  
  56.     }  
  57.   
  58. }  
原文地址:https://www.cnblogs.com/grimm/p/9116593.html