小编LEM*_*M01的帖子

在CI环境中自动部署PHP(Jenkins)

我目前正在考虑为一个小型开发团队共享的项目建立一个强大的CI和部署环境.目标是在测试方式,整体代码质量和部署方式方面实现一致性.

我读过关于Jenkins,Sonar,Maven,Capistrano,Phing,ANT,......说实话,我迷失在所有这些工具/技术的中间,并希望你验证我的理解并给予我对实现这一目标的最佳方法有所了解.

到目前为止我已经设置了什么:

  • Git:我们使用git作为版本控制系统,并为需要由CI工具分析的所有新开发人员提供分支"开发".
  • Jenkins:Jenkins由GIT钩子(在开发分支上)触发,并将执行PHING脚本执行以下操作:

    • Lint:验证PHP代码执行,代码分析器
    • PHPLoc:获取一些关于PHP代码的统计信息(复杂性,依赖性......)
    • PDepend:代码分析(不确定与PHPLoc的区别)
    • phpmd:乱七八糟的探测器(未使用的参数,复杂的代码...)
    • phpcpd:检测复制粘贴代码
    • PHPcs:验证编码标准
    • Phpdox:生成PHP文档
    • Php_Codebrowser:生成一个可浏览的PHP代码表示,其中包含违规的亮点......
    • PHPUnit:运行PHP测试

    Jenkins随后将所有报告/数据发送给Sonar unsing a sonnar-runner.

  • Sonar正在收集所有这些数据,将它们存储在一个数据库中,该数据库提供了一种分析应用程序代码随时间演变的方法.它还以比Jenkins更好的方式显示信息.

缺少块

  • 自动部署到QA: 当构建脚本成功时(基于测试成功),我想自动部署到QA env.这应该触发一个在QA上提取正确数据的过程,对DB进行更改,并对潜在的文件/文件夹进行清理和权限设置.
  • 自动部署到PROD:这应该与上面相同,但基于主分支.我们还应该在部署后在该PROD环境中添加另一轮测试.

工具评论

  • Git:没有必要解释这个,它是关于版本控制的
  • Jenkins:CI工具,可自动构建(代码验证+测试)
  • 声纳:报告工具(随时间可视化构建数据)
  • Maven:不确定这个.它是部署的缺失部分吗?还是其他报告工具?
  • Capistrano:部署工具

你的输入:-)

  • 您对我的CI总体设置的观点(它是否有意义,我使用的是正确的工具吗?)
  • 您的经验是什么是最好的部署工具?
  • 由于Jenkins在这个整体CI /部署架构中是"调度员",它是否也是触发部署的?如果是,我认为可以根据构建状态(成功/失败)触发某些操作?

非常感谢您的时间和帮助!

php deployment build-automation continuous-integration jenkins

20
推荐指数
1
解决办法
1万
查看次数

慢流浪盒,怎么改善这个?

我们为我们的开发盒构建了一个流浪盒,我们面临着一些延迟问题.

问题:

  • 资产:手表很慢
  • (app_dev.php)中的整体应用程序访问速度很慢
  • 在vagrant box的共享文件夹中使用"find"命令是非常慢的

关于包装盒:

  • 在virtualbox上运行(在Mac和Linux上运行)
  • LAMP env(ubuntu)
  • 大代码库(10K +文件)
  • Symfony 2应用程序

为提高性能所做的事情:

  • 使用NTFS(使用bindfs)
  • 流浪汉配置:

config.vm.synced_folder"#{folder ['source']}","/ mnt/vagrant - #{i}",id:"#{i}",输入:'nfs',mount_options:['rw' ,'vers = 3','tcp','fsc','actimeo = 2']

  • 将缓存和日志移出共享文件夹(AppKernel更新)

我们可以清楚地看到,只要访问共享文件夹中的文件,"bindfs"进程就会占用大量的cpu.

首先是正常吗?当这些文件被访问时,我期待vagrant复制盒子上的文件.

我们可以看到盒子本身工作正常,因为当访问缓存数据(共享文件夹之外)时,事情进展得足够快,那么我该怎么做才能提高盒子性能并避免这些延迟问题呢?

php performance symfony vagrant

6
推荐指数
3
解决办法
1万
查看次数

Symfony2自定义验证程序未加载服务

编辑:已解决

我正在尝试构建一个作为服务运行的自定义验证器(主要用于获取实体管理器).

我按照文档和一些博客文章但无法使其工作.我没有得到任何错误消息,但从来没有调用我的约束方法isValid.

我的实体类(必须由"UniqueLem"验证(注意Doctrine验证器有效):

namespace Elyotech\VersionManagerBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Me\AdminBundle\Validator\UniqueLem;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity(repositoryClass="Me\VersionManagerBundle\Repository\ProjectRepository")
 * @ORM\Table(name="project")
 * @UniqueLem
 * @UniqueEntity("name")
 */
class Project{...
Run Code Online (Sandbox Code Playgroud)

我的Constraint类: 命名空间Elyotech\AdminBundle\Validator;

使用Symfony\Component\Validator\Constraint;

/*
 * @Annotation
 * */

class UniqueLem extends Constraint
{
    public $message = 'This value is already used';
    public $entity;
    public $property;

    public function validatedBy()
    {
        die; // Test to check if function is called
        return 'validator.unique';
    }

    public function getTargets()
    {
        return …
Run Code Online (Sandbox Code Playgroud)

validation symfony

5
推荐指数
0
解决办法
2838
查看次数

Vagrant 2路文件夹同步

我已经设置了一个Vagrant盒子来运行我的网络服务器来托管我的Symfony2应用程序.除文件夹同步外,一切正常.

我尝试了两件事:

  1. config.vm.synced_folder LOCALFOLDER,HOSTFOLDER
  2. config.vm.synced_folder LOCALFOLDER,HOSTFOLDER,type ="rsync"

选项1:第一个选项有效,我实际上不知道文件是如何共享但它的工作原理.文件以两种方式复制,但应用程序速度超慢.Symfony正在生成可能存在问题的缓存文件,但我真的不知道如何解决这个问题,看看发生了什么.

选项2:同步只能以一种方式完成(从我的本地机器到流浪盒),这种情况涵盖大部分情况并且速度很快.问题是,当我在vagrant box上使用symfony命令行生成一些文件时,它们不会被复制到我的本地机器上.

我的问题是: 进行2种方式同步的最佳方法什么?使用选项1,我如何(因为它可能是问题)从同步中排除一些文件.使用选项2,如何确保将远程更改复制到本地计算机?

谢谢!

symfony vagrant

4
推荐指数
1
解决办法
3376
查看次数

$'\r' - 在 bash 中找不到命令

我有以下脚本:

#!/bin/sh

#parameters definition
ROOT_PATH=/var/www/
msql_psw="cc"
mysql_login="bb"
mysql_db_name="aa"

echo START MYSQL DUMP

NOW=$(date +"%Y-%m-%d")
SQLFILE="log-$NOW.sql"
mysqldump --add-drop-table -u "$mysql_login" --password="$mysql_psw" "$mysql_db_name" > "$ROOT_PATH/$SQLFILE"
Run Code Online (Sandbox Code Playgroud)

当它与 一起运行时sh -x,它会给出空行的命令未找到错误,甚至非空行也无法正常工作:

sh -x export_db.sh 
+ $'\r'
: command not found2: 
+ ROOT_PATH=$'/var/www/\r'
+ msql_psw=$'cc\r'
+ mysql_login=$'bb\r'
+ mysql_db_name=$'aa\r'
+ $'\r'
: command not found8: 
+ echo START MYSQL $'DUMP\r'
START MYSQL DUMP
+ $'\r'
: command not found10: 
++ date +%Y-%m-%d
+ NOW=$'2014-10-02\r'
+ SQLFILE=$'log-2014-10-02\r.sql\r'
+ mysqldump --add-drop-table -u $'bb\r' --password= $'aa\r'
: …
Run Code Online (Sandbox Code Playgroud)

bash shell

2
推荐指数
1
解决办法
2万
查看次数