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

时间:2023-10-13 10:17:38

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打包脚本

  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. #zip all file to target path
  25. zip -r ${targetpath}${datestr}/all.zip .
  26. #update解压增量包覆盖
  27. unzip -o ${targetpath}${datestr}/auto.zip -d  test_path#test_path为测试环境代码目录
  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. class FileStatic
  8. {
  9. public $targetPath;//目标路径
  10. public $fileArr;//需要打包文件日志
  11. public $deleteFile;//删除的文件
  12. public $projectName;//项目名称
  13. public $sourcePath;//代码源
  14. public function __construct($projectName = 'shop'){
  15. $this->projectName = $projectName;
  16. $log = file_get_contents('svn.log');
  17. $this->fileArr = explode("\n", trim($log));
  18. $this->deleteFile = array();
  19. $this->targetPath = __DIR__.'/pakage/'.date('Ymdhms',time());
  20. $this->sourcePath = __DIR__;
  21. if( !is_dir ($this->targetPath)) $this->mkdirs($this->targetPath,0775);
  22. }
  23. //打包
  24. public function makePackege(){
  25. if(empty($this->fileArr)){
  26. echo "no file to make";
  27. exit;
  28. }
  29. foreach($this->fileArr as $file){
  30. $targetFile = $this->targetPath.'/'.$file;
  31. if(is_dir($file)){//文件夹
  32. if( !is_dir ($targetFile)) $this->mkdirs($targetFile,0775);
  33. }elseif(is_file($file)){//文件
  34. $folderName = dirname($targetFile);
  35. if( !is_dir ($folderName)) $this->mkdirs($folderName,0775);
  36. copy($this->sourcePath.'/'.$file,$targetFile);
  37. }elseif(!file_exists($file)){//不存在的文件夹
  38. $this->deleteFile[] = $file;
  39. }
  40. }
  41. }
  42. /**
  43. * 创建目录
  44. */
  45. private function mkdirs($dir, $mode = 0775){
  46. if (is_dir($dir) || @mkdir($dir, $mode)){
  47. return true;
  48. }
  49. if (!$this->mkdirs(dirname($dir), $mode)){
  50. return false;
  51. }
  52. return @mkdir($dir, $mode);
  53. }
  54. }