2017年12月

使用 Docker 部署 Upsource

Upsource 是 Jetbrains 推出的一款用于 Code Review 的基于 Web 的系统,功能十分强大,最重要的是和 IDE 全家桶无缝集成,可以直接在 IDE 里进行 Code Review。

在选择 Upsource 之前我也调研了 Gerrit 和 Phabricator,觉得不太适合当前的团队。这两个工具更适用于强制 Code Review 并且把其作为 CI 的一环的团队使用,这自然是有好处,不过稍微有些繁琐。这两者的具体区别可以参考 https://stackoverflow.com/questions/10545480/gerrit-phabricator-review

使用 Docker 部署

使用 Docker 部署 Upsource 可以参考官方的文档 https://www.jetbrains.com/upsource/download/#section=docker

有几个注意点:

  • docker pull 的时候必须指定镜像版本号(也就是 .,见https://hub.docker.com/r/jetbrains/upsource/tags/),不然找不到
  • 在跑容器之前,记得把映射的那几个目录按照教程上 chown 一下
  • 配置 base url 时可以先按照能检测通过的配,后面可以通过修改 conf/internal/bundle.properties 来修改
  • 如果提示某个目录不为空,无法下一步的话,可以进目录看看有没有隐藏文件,如果有就全删了

不出意外的话应该就能正常跑起来了。

使用 nginx 配置反代

由于 Upsource 使用了 websocket,所以常规的反代配置可能有问题,直接参考官方文档就 ok 了,见 https://www.jetbrains.com/help/upsource/proxy-configuration.html#NginxConfiguration

server {
         listen  2222;
         server_name  localhost;
         location  / {
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;

            # to proxy WebSockets in nginx
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_pass http://upsourcemachine.domain.local:1111;
            proxy_pass_header Sec-Websocket-Extensions;
         }
      }

与 IDE 的整合

安装 Upsource Integration 插件即可,首先 Upsource 上先连接号该项目的 Git,然后本地打开的项目右下角点击 Upsource 图标就可以进行关联。

参考链接

http://blog.csdn.net/nikobelic8/article/details/54897314

使用 Docker 搭建 Gitlab + Jenkins + SonarQube 的 PHP 持续集成环境

对于开源 PHP 项目,现在比较成熟的一套持续集成方案是使用 Github + TravisCI + StyleCI + Scrutinizer + coveralls,不过这套方案如果想要用于私有项目的话就抓狂了,个个要买套餐,其中很多还不便宜。而且对于公司内使用的项目来说,内部搭建的 Gitlab 方案更为常见,对于这种情况,我们可以使用 Gitlab + Jenkins + SonarQube 来进行代替。

安装 SonarQube

$ docker pull postgres

$ docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres

$ docker pull sonarqube

$ docker run --name sq --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar -p 9000:9000 -d sonarqube

执行完毕上面的命令后通过浏览器进入 SonarQube,默认用户名和密码都是 admin,进去后会有一段引导,里面会让你生成一个 access token,这个后面的配置 Jenkins 时会用到。

如果没有记下来的话,可以点右上角的用户头像里面的 My Account > Security 标签中可以生成一个新的。

配置 Jenkins

Jenkins 需要在全局的 系统设置 里面添加 SonarQube Server,填下对应的访问地址和上一步获取的 access token 即可。服务器地址填写 localhost 可能会有问题,填 ip 会比较好些。

然后需要在 系统管理 的 Global Tool Configuration 菜单中配置 SonarQube Scanner 安装,这个直接选择自动安装就好了,十分方便。

这两步配好之后就到对应的项目配置中添加构建步骤,下拉选择 Execute SonarQube Scanner,然后对于 2.1 版本以上的 SonarQube Scanner 就只需要配置 Analysis properties 这一项就可以了,比较常用的参数包括 sonar.projectKey (用来确定 该项目在 SonarQube 中叫什么名字) 和 sonar.sources=(用来指定需要扫描的目录)。

配完之后选择构建即可,可以去当前构建的 Console Output 里面查看有没有报错,正常执行完成的话,在 SonarQube 项目面板中就可以看到一个新增的命名为配置的 sonar.projectKey 的 项目了。

注意点:

  • SonarPHP 自定义检查规则需要用 java 来写扩展,比较新的版本内置了 psr2 的规则基本够用,内置的 Quality Profiles 是可以复制一个出来进行自定义的
  • Sonar 嗅探出的一些问题可能实际上并没有什么影响,比如变量名中含有 ‘pwd’ 等,如果原本使用方式确实合理则可适当忽略

参考链接: