zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    c基础
    一维数组,字符数组
    循环结构
    分支结构
    结构体
    Python简介和入门
    Python基础(一)
    Markdown 基础学习
    PyCharm 专业版安装
    Python基础(二)
  • 原文地址:https://www.cnblogs.com/grimm/p/9116593.html
Copyright © 2011-2022 走看看