Phabricator代码审计

学习资料

http://www.maceliu.com/welcome/article?id=3
https://secure.phabricator.com/book/phabricator/

简介

Phabricator是一套基于Web的软件开发协作工具,它集成了众多实用功能,包括:
代码管理:添加 Git, Mercurial 和 SVN 仓库,查看源码,review 代码
bug 追踪:测试人员、开发人员协同工作
项目管理:项目的启动、进展、完成
工作板:所有任务一目了然
wiki:构建文档
任务系统:创建任务、指派任务、完成任务、增加或降低优先级
博客系统:甚至可以写博客

官方文档

https://secure.phabricator.com
说明文档
https://secure.phabricator.com/book/phabricator/
开发者工具
https://secure.phabricator.com/conduit/

源码

镜像仓库
https://github.com/bitnami/bitnami-docker-phabricator
开源仓库
https://secure.phabricator.com/source/phabricator/repository/stable/

手动安装

LNMP+Phabricator

二、Phabricator 无法运行在 PHP 7.0 上。Phabricator 支持 5.x 版本以及 7.1 以上版本,唯独不支持 7.0。据官方声明 ,Phabricator 依赖的异步信号处理特性,在 7.0 版本被移除了,但是在7.1 版本又加上了。使用 PHP 7.0 的用户,可以降级到 PHP 5 或升级到 PHP 7.1,或者用 Docker。
三、Phabricator 需要 3 个仓库的代码:arcanist、libphutil、phabricator。其中phabricator是项目的主体,arcanist 是 Phabricator 的命令行工具,libphutil 是Phabricator 的实用工具集,包括文件系统、markdown解析、守护进程等。保证 arcanist、libphutil、phabricator 目录为并列关系。

使用脚本安装

参考:https://secure.phabricator.com/book/phabricator/article/installation_guide/
https://www.cnblogs.com/chorulex/p/5381558.html

一、脚本路径:https://secure.phabricator.com/diffusion/P/browse/master/scripts/install/install_ubuntu.sh
安装时,需要先选定安装路径,因为安装脚本是默认使用当前工作路径安装的
启动安装脚本,按照提示一步一步的执行。安装时会检查系统是否已安装必须的组件(MYSQL、APACHE2等),如果没有安装,则脚本会自动安装。安装到最后会提示是否修复问题(Fix issue),选择修复并继续执行,执行完成后,即已安装完成。
安装过程中会从github中克隆出该系统的源码和相关文件,这个过程可能会比较耗时,需要耐心等待。
https://github.com/phacility/libphutil.git
https://github.com/phacility/arcanist.git
https://github.com/phacility/phabricator.git
二、Phabricator安装完成后需要将其使用Apache2部署

docker安装

mysql+Phabricator
遇到问题:
1、Phabricator容器中没有config命令,导致很多参数无法配置
原因,Phabricator容器版本太低,
解决方法:重新拉取最新版本
2、ip+端口无法访问
在这里插入图片描述

使用 Docker 和 Traefik v2 搭建 Phabricator

参考:https://zhuanlan.zhihu.com/p/104670727
https://github.com/soulteary/phabricator-dockerize

Arcanist

这个工具用来生成Diff、提交变更和审查请求,对变更做出更改,或者在通过审查后发布到远程仓库分支中。

win10安装Arcanist

一、安装PHP环境
到PHP官方网站下载最新版本:http://windows.php.net/download/,这里要注意下载与操作系统一致的包,否则后续步骤会出现错误,32位系统下载x86的包,64位系统下载x64的包,线程安全和非安全都可以。安装步骤:
解压到一个指定的目录(如D:\PHP);
将PHP安装目录(如D:\PHP)加入到PATH环境变量中;
复制php.ini-development文件为php.ini,并且把“extension_dir=“ext””、“extension=php_curl.dll”、“extension=php_mbstring.dll”这几行行首的分号去掉(如果没有直接加上)

二、安装Git或者SVN
忽略。

三、安装Arcanist及libphutil
libphutil是php的工具集,Arcanist运行需要依赖它。
下载地址:
    https://github.com/facebook/arcanist/archive/master.zip
    https://github.com/facebook/libphutil/archive/master.zip
下载后解压到指定的Phabricator目录(如D:\phabricator),并把目录名分别修改为arcanist、libphutil,并把arc.bat所在目录(例如D:\phabricator\arcanist\bin)配置到PATH环境变量中。
测试:打开cmd,运行php -i命令。
如果提示了错误:无法启动此程序,因为计算机中丢失 VCRUNTIME140.dll,是因为在Windows下运行php7需要Visual C++Redistributable 2015,去微软官网下载安装程序,安装一遍即可。有64位版和32位版,根据计算机配置进行下载,下面是下载链接:
  64位版下载地址:
   http://download.microsoft.com/download/9/E/1/9E1FA77A-9E95-4F3D-8BE1-4D2D0C947BA2/enu_INREL/vcredistd14x64/vc_redist.x64.exe
  32位版下载地址:      
   http://download.microsoft.com/download/9/E/1/9E1FA77A-9E95-4F3D-8BE1-4D2D0C947BA2/enu_INREL/vcredistd14x86/vc_redist.x86.exe
下载后根据提示安装即可。

三、全局配置arc编辑器
使用Arcanist时需要使用文本编辑器编辑大块的文本,不能使用微软自带的NotePad,有以下Windows平台的编辑器可供选择:
Notepad++
$ arc set-config editor
““C:\Program Files (x86)\Notepad++\notepad++.exe” -multiInst -nosession”

vim
$ arc set-config editor ““C:\Program Files (x86)\Git\share\vim\vim73\vim.exe””

GitPad
$ arc set-config editor ““C:\Users\yourusername\AppData\Roaming\GitPad\GitPad.exe””

Sublime Text
$ arc set-config editor
““C:\Program Files\Sublime Text 2\sublime_text.exe” -w -n”
以上编辑器的具体路径可改为自己的编辑器安装地址。

四、全局配置PhabricatorURI
配置PhabricatorURI:运行命令arc set-config default $pha-server,例如arc set-config default http://pha.apk.cn/

五、安装证书:运行命令arc install-certificate,依照提示访问http:// p h a − s e r v e r / c o n d u i t / t o k e n / , 复 制 内 容 粘 贴 t o k e n 即 可 。 六 、 运 行 命 令 pha-server/conduit/token/, 复制内容粘贴token即可。 六、运行命令 phaserver/conduit/token/token arc help来进行arc的使用学习。

Phabricator Code Review工作流

Phabricator提供两种Code Review的方式:pre-push,post-push
pre-push 是指审查发生在变更发布前;post-push 是指审查发生在变更已经被发布或者正在发布。
Phabricator的代码审查过程:Write, Review, Merge, Publish
审查的对象是还没有发布的变更。没有发布的变更被发送到Phabricator等待被审查,然后审查者做出反馈。变更作者根据反馈进行修改,在修改过程中,作者不必担心版本、解决方式这些事情。作者可以自由的复位、使用、移除或者舍弃老的变更。在从变更提交审核到审核者反馈,以及作者再次修改整个过程中,没有那种审核者把作者推入一个必须接受或者只能做少量改变的默认发布状态。
一旦通过审核,变更会被合并(Merge)和发布(Publish)(通常,这两个步骤由一个命令完成 arc land)
默认情况下,Phabricator会舍弃到达最后变更前的所做的中间过程,把最后变更的整个过程压缩成一次提交。总体来说,这意味着舍弃checkpoint commits, rebases, squash-merges, 并且把整个变更过程做为一次 fast-forward commit 提交到目标分支。
Phabricator在一定程度上能做到这些,是因为:什么都没有被发布,所以这种工作流可以以任何想要的方式发布变更。
有了这些,我们可以以我们想要的版本自由的rebase,fast-commit,这些是Phabricator默认的行为。

code review 大致的流程

  1. 修改代码
  2. arc diff,生成 revision,它的状态为 Need Review
  3. 邮件通知 reviewer 进行审核。如果审核不过,它会被置为 Need Revision,再次 diff 后,会重新回到 Need Review 状态;如果审核通过,它会被置为 Accepted
  4. arc land 后,revision 的状态会变为 Closed

真实的开发情况会比上面描述的流程复杂一些,比如我们不会等待一次 code review request 被Accepted 后,才继续开发,而是等待过程中继续开发。
为了适应真实的开发情况,制定了一个流程和规范。

先说一下流程图中的一些概念:

code review 分支

如果我们将之前的 develop 称为** develop分支,new_feature_branch 称为 feature 分支,我们现在引入一个新的概念,叫做 **code review 分支。

Minor change 时,会关系到** develop分支和 **code review 分支,执行的 land 命令为 arc land code_review_branch –onto develop

Feature Development 时,会关系到** develop分支、 feature 分支、 **code review 分支,执行的 land 命令为 arc land code_review_branch –onto new_feature_branch。之后会在 develop 上执行 git merge –no-ff new_feature_branch。

依赖性 revision 和 独立性 revision

在 crb1(code review branch 1) 上建立一个 revision 之后,如果接下来的开发依赖这个 revision 的修改,需要在 crb1 基础上,再 git co -b crb2。然后在 crb2 上执行 arc diff –create 建立 revision,这个叫依赖性 revision。
land 依赖性 revsion 时,需要按依赖顺序,依次land,不能跳跃。可以用 revision id 来辨别顺序。如果跳跃 land 一个revision id更大的依赖性 revsion,会将它所依赖的 revision 也push上去。
在 crb1(code review branch 1) 上建立一个 revision 之后,如果接下来的开发不依赖这个 revision 的修改,从最新的 develop 或者 feature 分支上,co 新的code review branch即可。

代码仓库-Diffusion

Phabricator能够托管git,svn等代码仓库,并提供SSH和HTTP访问方式。

创建git代码仓库

使用管理员账号登录Phabricator
Phabricator->diffusion->Create a Repository->Create Git Repository->name必填
在这里插入图片描述
Callsign 用于作为所有revision commit的前缀使用,一般用短小的全大写
新创建的仓库没有激活,如果需要和已有gitlib同步需先配置URIs,
在这里插入图片描述
直接激活仓库将生成新的代码仓库
在这里插入图片描述

删除仓库

仓库涉及到很多对象,从web页面删除成本很高,所以使用命令删除

cd /srv/phabricator/phabricator/bin
remove destroy rCALLSIGN
# CALLSIGN是 Callsign的值

仓库配置URIs

Diffusion->选择仓库->Manage->URIs->NEW URI

内置clone URIs

一、默认情况下,Phabricator通过检查配置自动公开和激活HTTP、HTTPS和SSH克隆uri,这些可以在Phabricator托管代码使用
二、Git或Mercurial存储库 的 security.require-https is disabled 和 diffusion.allow-http-auth is enabled,Phabricator将自动创建http clone uri
三、Git或Mercurial存储库 的 security.require-https is disabled 和 The phabricator.base-uri protocol must be https://.,Phabricator将自动创建https clone uri
四、phd.user must be configured 将自动创建ssh clone uri

URIs I/O Types

在这里插入图片描述

显示/隐藏URIs

在这里插入图片描述

主机存储库 Host Repositories

1、Phabricator托管代码。同gitlab类似类似,用户可以从Phabricator pull代码或者push代码到Phabricator或者clone代码
2、可以创建新的存储库,直接激活。

监听存储库 Observe Repositories

1、代码在gitlib上托管,Phabricator监听gitlib等存储库的变化并更新到Phabricator,监听存储库中的代码只可读。
2、配置方法
(1)创建新仓库,不要激活
(2)将要观察的远程URI添加为存储库URI
(3)设置要观察的URI的I/O类型为Observe
(4)配置凭据;在gitlab上新建phabricator账户,并将账户的私钥配置在phabricator平台上
在这里插入图片描述
(5)激活仓库
遇到问题:
1、gitlab凭据是正确的,但是提示remote: HTTP Basic: Access denied
解决方法:删除数据库数据,删除数据库容器,重新安装
2、cannot mkdir /repos/1: Permission denied
解决方法:
cd /
chmod -R 777 repos
3、Missing Binary git-http-backend
解决方法:进入容器
ln -s /usr/lib/git/git-http-backend /srv/phabricator/phabricator/support/bin

仓库轮询机制

一、当URI 的I/O 配置为Observe类型,phabricator需要轮询去获取代码的变更。如果轮询太频繁,会给本地和远程仓库服务造成太多负载。如果轮询太少,phabricator需要很长时间才能变更提交。

二、Phabricator会根据存储库活动选择默认的轮询间隔。这些间隔从每15秒(对于活动存储库)到每6小时(对于两个月内没有提交的存储库)不等。
默认情况下,Phabricator通过检查自上次提交以来的时间来确定轮询存储库的频率。在大多数情况下,这是相当准确的,并产生良好的行为。特别是,它会自动减少很少使用的存储库的轮询频率,减少了大量非活动存储库的安装负载。

三、默认轮询规律,最小等待15s,最大等待6小时

自上次提交间隔时间提交代码后轮询等待时间
Minimum15 seconds
6habout 30 seconds
12habout 1 minute
1 dayabout 2 minutes
2 daysabout 5 minutes
3 daysabout 7 minutes
4 daysabout 30 minutes
7 daysabout 45 minutes
10 daysabout 1 hour
20 daysabout 2 hours
30 daysabout 3 hours
Maximum6 hours

四、精准的轮询时间在 Diffusion > 选择仓库> Manage Repository-> Basics-> Status->"Update Frequency"能看到,还可以看到上次存储库更新时间。

五、快速更新代码的方法
1、手动更新代码
在 Diffusion > 选择仓库> Manage Repository-> Basics-> Status
点击 Update Now
长时间不更新的代码可以这么操作。
2、使用arc land或者arc arc commit提交变更,会及时更新代码。
3、使用commit 钩子函数
4、使用命令行更新:phabricator/ $ ./bin/repository update --trace

镜像存储库 Mirror Repositories

一、既可以在本地托管代码,也可以将Repositories仓库的代码push到其它远程仓库
方法:创建代码仓库,添加对应的 URI,并且把 I/O Type 选为 Mirror。

停止镜像

禁用镜像URI;或将URI的I/O类型更改为None。

代理仓库 Proxy Repositories

仓库策略配置

在这里插入图片描述

仓库选项配置

审查代码的工作台-Differential

在这里查看变更审查情况,对变更进行审查或评论等操作。
在这里插入图片描述

审查人操作

Comment:说点什么。可以针对某行代码进行评论,直接点击行号即可
Accept Revision:接受变更,这哥们代码写得不错,不需要改
Request Changes:不行,还要改
Resign as Reviewer:重新指定审查代码的人
Commandeer Revision:字面意思是将这个Revision据为己有的意思,实际上这个时候Reviewer的身份已经变为Owner的身份了,不能再进行Review了,但是Comment还是可以的
Add Reviewer:添加审查人
Add Subscribers:添加订阅者,CC

作者操作

Comment:说点什么。可以针对某行代码进行评论,直接点击行号即可
Abandon Revision:废除版本。废除后,这个版本就不需要再审核了
Plan Changes:计划变更,我自己发现了一些问题或者需求有变,正在改
Add Reviewer:添加其它审查人(除当前审查人外)
Add Subscribers:添加订阅者,CC

提交审查请求

一、arc diff : 本地分支的 HEAD 与远程对应分支的 HEAD 进行对比,并生成差异对比发送到 Phabricator。
提交代码审查需输入以下信息,否则提交失败
Summary:(备注一下这次提交做的什么)
Test Plan: yes
Reviewers: (填写审核人)zhong.zheng pengfei.you
在这里插入图片描述
提交后会生成审核地址
在这里插入图片描述
没有commit ,直接arc diff 会提示进行 commit,并进入信息编写窗口
在这里插入图片描述
第一次提交没有审核再arc diff ,两次diff会合并成一个,不需要再指定审核人等。审核人页面显示
在这里插入图片描述
二、arc diff commit_id: 本地分支的 HEAD 与之前的commit 做对比
三、arc diff --trace 可查看详细信息

Arcanist常用命令

arc diff:发送变更详情和审查请求
arc land:当通过审查后使用这个命令推送变更(Git and Mercurial)
arc list:显示变更处理的情况
审核通过
在这里插入图片描述
arc cover:查找最有可能审查变更的人
arc patch:给版本打补丁
arc export:从Differential下载补丁
arc amend:更新Git commit
arc commit:提交变更(SVN)
arc branch:查看Git branches更加详细的信息

在配置了 lint 和 unit test intergration后,可以用这些命令:
arc lint:静态代码检查
arc unit:单元测试

与其它工具交互:
arc upload:上传文件
arc download:下载文件
arc paste:创建和查看剪贴

还有一些高级功能:
arc call-conduit:执行 Conduit 方法
arc liberate:创建或更新 libphutil 库
arc shell-complete:激活 tab 补全

将仓库托管在phabricator上,通过herald的方式来强制用户 Code Review

再次强调一下前提:在开始 Code Review 流程前,请先确认团队成员的git remote url已经切换为Phabricator上对应仓库地址。
强制用户Code Review,需要创建Herald Rule。在创建时,New Rule for 选:Commit Hook: Commit Content.;Rule Type选:Global,或者根据自己需要选择;Conditions中是组合条件,可以根据自己需要指定一些条件;Action 指定当前情况符合你指定的条件组合时执行的动作。

将仓库托管在gitlab上,在代码托管服务器上增加hook来强制用户 Code Review

一、gitlab server端添加hook
gitlab添加hook的方式有两种:局部添加,作用于当前这个仓库;全局添加,作用于全部仓库 。

二、局部配置
cd /srv/gitlab/data/git-data/repositories/root/pipeline-example-go.git ###gitlab serve端进入到具体的仓库路径下
mkdir custom_hooks #创建自定义hook目录
touch pre-receive #创建pre-receive 文件
chmod 755 pre-receive #修改文件权限
pre-receive 钩子,在有人用 git push 向仓库推送代码时被执行,其内容如下:

#!/usr/bin/env python
import sys,os
import fileinput
import re
import json
import requests
def has_been_reviewed(start_commit, end_commit):
    cmd = 'git rev-list %s...%s' % (start_commit, end_commit,)
    Flag = False
    commits = os.popen(cmd).readlines()
    pattern = re.compile(r'Differential Revision: (.*)')
    for commit in commits:
        cmd = 'git rev-list --format=' + '%s%b ' + '--max-count=1 %s' % commit
        res  = os.popen(cmd).readlines()[-2]
        match_str = pattern.match(res)
        if not  match_str:
            print("Please use 'arc diff' to commit")
            continue
        http_url = match_str.group(1)
        url = "https://xxx/api/differential.query?api.token=*****"
        info = json.loads(requests.get(url).text)
        for i in info['result']:
            if i['uri'] != http_url: continue
            if i['statusName'] == 'Accepted':
                Flag = True
            else:
                print("Current Status: %s, Need Review and Accepted" % i['statusName'])
            break
    if Flag:
        sys.exit(0)
    else:
        sys.exit(1)

if __name__  == "__main__":
    for line in fileinput.input():
        args = line.split(' ')
    start_commit = args[0]
    end_commit = args[1]
    if start_commit != '0000000000000000000000000000000000000000' and  end_commit != '0000000000000000000000000000000000000000':
        has_been_reviewed(start_commit, end_commit)

代码解释:
1.git rev-list --format=%s%b --max-count=1 ${commit_id}
#获取git commit 的提交信息,默认git commit -m 后的信息,但是使用arc diff 之后,arc diff的信息会覆盖之前的git commit 的内容
2.requests.get(“https://***/api/differential.query?api.token=***”)
#通过ph的api接口获取到所有的differential 信息,其中token 可通过https://***/conduit/login/ 获取
3.#获取differential的信息之后,选取uri为当前提交的revision,若状态Accepted,表示代码review通过,退出程序,返回状态码0,表示不拦截
4.#若获取状态不为Accepted,则返回状态码非0,表示执行失败,拦截git push请求


我们之前找不到token , 那个token是arc install-certificate生成的

三、 全局配置
1.开启gitlab的自定义hook参数

vim  /etc/gitlab/gitlab.rb   #配置如下 
gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks" 
 #取消这行注释,默认是注释
2.mkdir -p  /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d  # 创建目录
3.touch /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive  #创建文件pre-receive 
4.chmod 755 /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive 
5.pre-receive #文件内容如上
6.gitlab-ctl reconfigure  #重新加载gitlab的配置, 使配置生效

通过HTTP访问Phabricator托管的存储库配置

一、配置
1、config-> All Setttings ->diffusion.allow-http-auth->Allow HTTP Basic Auth
2、点击你的头像 —> Manage —> 右侧菜单面板 Edit Settings —> 左侧菜单面板 VCS Password
强烈建议不要把这个密码设置为Phabricator登录密码,因为 vcs 密码很容易泄露。
3、新建代码仓库点击clone可看到http

通过http clone Phabricator仓库

一、git clone 配置用户名和密码
用户名是Phabricator账户,密码是Phabricator账户的VCS密码
在这里插入图片描述
二、遇到问题:
异常信息可在仓库的base->status中看到
1、fatal: unable to access ‘http://172.20.98.103:8891/diffusion/1/demo.git/’: The requested URL returned error: 403
权限不足
解决方案:设置VCS密码

2、unable to access ‘http://172.20.98.103:8891/diffusion/1/demo.git/’: The requested URL returned error: 500
服务器错误,提示Missing Binarygit-http-backend
解决方案: 增加一个软连接
find . -name git-http-backend 查找相关文件路径
n -s /usr/lib/git/git-http-backend /usr/bin/git-http-backend

通过SSH访问Phabricator托管的存储库配置

一、配置用户
www-user(php-fpm.user) nginx用户
daemon-user (phd.user) 守护进程用户
vcs-user
1、设置daemon-user用户,www-user和daemon-user使用同一个nginx用户,

echo $PATH
==》/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
cd /usr/bin
config set phd.user apache

2、设置vcs-user

config set diffusion.ssh-user git

二、创建用户并设置
useradd git
usermod -p NP git 修改用户密码
usermod -s /bin/sh git 修改用户登入后所使用的shell。

三、配置sudo,添加sudo,执行命令 visudo
vim /etc/sudoers,
1、增加如下内容
git ALL=(apache) SETENV: NOPASSWD: /usr/bin/git-http-backend,/usr/bin/git,/usr/bin/git-upload-pack,/usr/bin/git-receive-pack,/usr/bin/svnserve,/usr/bin/svn
2、注释掉:Defaults requiretty

四、配置SSH
1、配置端口config set diffusion.ssh-port 2222
遇到问题:容器中的config命令不可使用
解决方法:
2、创建配置文件
cp ./resources/sshd/phabricator-ssh-hook.sh /usr/libexec/phabricator-ssh-hook.sh
chmod 755 /usr/libexec/phabricator-ssh-hook.sh
cp ./resources/sshd/sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator
3、编辑配置文件
vi /etc/ssh/sshd_config.phabricator
设置
AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh
AuthorizedKeysCommandUser git
AllowUsers git
4、vi /usr/libexec/phabricator-ssh-hook.sh
#NOTE: Replace this with the username that you expect users to connect with.
VCSUSER=“git”
#NOTE: Replace this with the path to your Phabricator directory.
ROOT="/opt/phabricator"

5.启动sshd
/usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator
出现错误信息:
Could not load host key: /etc/ssh/ssh_host_dsa_key

解决方法:
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

一路回车即可
然后再次启动

6、重启phd daemon
./bin/phd restart
如果有权限问题,设置目录权限
chown -R apache. /var/tmp/phd
chown -R apache. /var/repo

通过ssh clone Phabricator仓库

方法一:
1.在本地创建Git仓库。
git init
2.ssh-keygen -t rsa生产公钥私钥
3.读取公钥内容。
4.在“Phabricator >头像> Settings > SSH Public Keys”中单击“Upload Public Key”。
5.将刚才读取的公钥内容复制到 Public Key 中,并起一个名称。
6.找到源代码路径。
7.克隆代码。
git clone ssh://
8、提交代码,把本地的Git远程URL设置为Phabricator上代码仓库地址
git remote set-url 远程名称 新的url

方法二:
1.在本地创建Git仓库。
git init
2.在“Phabricator > Settings > SSH Public Keys”中单击“Generate Keypair”,并在弹出窗口单击“Generate New Keypair”。
3.此时会生成一个以“id_rsa_phabricator.key”命名的私钥,单击“Download Private Key”进行下载。下载完成,单击“Done”。
4.将下载的私钥拷贝至路径“C:\Users\用户名.ssh”。
5.找到源代码路径。
6.克隆代码。
git clone ssh://

配置跟踪参数

在tracking内配置跟踪参数,填写remote url(代码库地址),配置代码库在服务器上保存的路径local path:比如/home/username/git,然后再根据情况填写用户名,密码一般就可以了。保存后,phabricator后台会自动tracking代码库的更改情况。

本地仓库模式下code review 的流程

1、把本地的Git远程URL设置为Phabricator上代码仓库地址
git remote set-url 远程名称 新的url
2、在项目代码的根目录下,创建 .arcconfig 文件,内容如下:
{
“phabricator.uri” : “你Phabricator系统访问URL”
}
3、写代码
4、提交审查请求(arc diff)
5、审查(Differential)
6、(审查通过后)合并提交(arc land)

设置用户登录认证方式

一、管理员登录->Auth->AddProvider->选择登录方式

方法一:用户名密码登录
用户自己注册Phabricator账号。为了保障安全,设置了只允许公司邮箱地址注册:Config —> Core Settings —> Authentication —> auth.email-domains->添加邮箱后缀
即新注册用户需要管理员批准: Authentication —>auth.require-approval -> 默认是开启状态
在这里插入图片描述
密码最小长度: account.minimum-password-length
电子邮箱认证: auth.require-email-verification
可编辑账户基本信息: account.editable = true

方法二:LDAP->配置LDAP信息

设置注册

在这里插入图片描述

注册用户审核

管理员登录后,选择people->Approval Queue->选择账号->选择approval

设置邮件发送服务参数

首先,配置 mail-adapter (邮件发送方式):Config —> Core Settings —> Mail —> metamta.mail-adapter,我选择的是 PhabricatorMailImplementationPHPMailerAdapter ,通过SMTP的方式发送邮件。在选择完之后,需要设置SMTP服务器地址、账号和密码:Config —> Core Settings —> PHPMailer —> metamta.mail-adapter,根据你自己邮箱的配置,相应的设置 phpmailer.smtp-host、phpmailer.smtp-port、phpmailer.smtp-protocol、phpmailer.smtp-user、phpmailer.smtp-password、phpmailer.smtp-encoding 。

新建用户

新建用户,只能建Normal User和System Agent角色的用户。在系统能发邮件条件下,用户会收到一封邀请邮件。

用户角色分类

Administrator,System Agents,Disabled Users,Normal Users

Herlad 创建规则

Audit中的数据来源之一通过规则触发
规则分公共的和私有的两类。公共的会影响所有人,所有人也都能编辑。私有的只影响创建者。
规则创建包括两部分,一部分是条件的设计,可以有多个条件组合使用;另一部分是触发的动作,可以是发邮件或者是Audit。

Audit

一、Audit也用于对代码进行审查,与Differential区别:
1、Differential是提交到git之前审查,audit一个是提交到git之后
2、Differential可以做到对代码的每一行进行备注(功能上强于Audit)

二、触发Audit的方法
1、配置Herlad规则
2、git提交时在备注中加入Auditors:xxx。xxx为Phabricator系统中用户名。

三、Audit中的操作是对commit进行审核。Audit的右边会有数字显示当前有多少提交(commit)需要Audit。
1、选择Accept Commit动作保存后,这条commit记录就从Audit中消除

设置普通账户为管理员账户

在这里插入图片描述

Maniphest bugs追踪工具

Projects

Phriction

类似于Wiki,可以记录一些信息。

Diviner

文档

Conpherence

发消息,需要手动操作

Feed

查询各个人操作内容的地方

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值