Jenkins Phabricator 集成



一、 简介2

1. 持续集成2

2. Jenkins. 2

3. Phabricator. 2

4. 目标2

二、 搭建2

1. 所需的软件2

2. 环境搭建2

1)      安装JenkinsPhabricator. 3

2)      Phabricator
配置3

3)      Jenkins
配置3

三、 JenkinsPhabricator集成11

1. 安装配置11

2. 使用13

四、 Reference. 18

一、 简介

1.
持续集成

一种软件开发实践,即团队的成员经常集成他们的工作,通常每个成员每天至少集成一次,这导致每天发生多次集成。每次集成都通过自动化的构建(包括测试)来验证,从而尽快地检测出集成错误。许多团队发现这个过程会大大减少集成问题,让团队能够更快地开发内聚的软件。本质上说,持续集成就是通过快速的反馈降低风险。

 

2. Jenkins

Jenkins 是一个用java编写的持续集成工具. 它为软件开发提供持续集成服务。它基于服务器,并运行于servlet容器,例如Apache Tomcat。它支持版本控制工具,包括CVS, Subversion,
Git, Mercurial, Perforce, Clearcase
RTC, 并能执行基于Apache Ant Apache Maven 的项目。另外,它能通过多种方法开始构建,例如, 由版本控制系统触发,由cron-like机制调度,由远程命令触发,或者通过一个URL

 

3. Phabricator

Phabricator 是一套基于网络的软件开发协作工具,包括代码审查工具、库浏览器、Herald
变化检测工具、Bug 跟踪、Phriction WikiPhabricator 集成了GitMercurial、和Subversion版本控制工具。它在Apache License 2 协议下发布的自由软件。

 

4. 目标

我们的目标是采用Git + Phabricator+ Jenkins模式,实现Git托管代码,Phabricator进行代码审查、Bug 跟踪,Jenkins集成构建的流程。通过PhabricatorJenkins的强大功能,完善代码管理和编译,测试以及部署,提高软件质量并加速软件开发。

二、 搭建

1. 所需的软件

为了搭建一个完整的持续集成系统,我们需要如下软件:

ApacheInternet上最流行的Web服务器软件,仅支持静态网页

PHP:在服务器端执行的嵌入HTML文档的脚本语言

MariaDB/MySQL:数据库管理系统

Git:版本控制系统的一个免费开源客户端

Jenkins:持续构建工具

PhabricatorCode review 工具

以下分别是这些软件的安装配置和使用方法的简要介绍。

2.
环境搭建

1)   安装JenkinsPhabricator

具体内容查看安装脚本install-jenkins-phabricator.sh

2)   Phabricator 配置

安装完成后,打开http://<your-server> ,首先注册一个管理员账户。

按照官方配置指南Configuration
Guide
,需要进行多项配置,这里只介绍几个比较重要的,其余可以省略或自行参考官方指南。

Ø 
Accounts
and Registration

打开http://<your-server>/auth
,添加一个或多个登录系统。登录方法称为AuthenticationProvider,例如以下:

l 
Username/Password: 用户使用用户名和密码进行登录或注册

l 
LDAP: 用户使用LDAP认证进行登录或注册

l 
OAuth: 用户使用支持OAuth2 的提供商账户(例如GithubFacebookGoogle)进行登录或注册。

 

l 
恢复管理员账户

如果你意外的锁住了你的管理员用户,可以使用bin/auth脚本进行恢复,要恢复管理员账户,运行:

phabricator/$ ./bin/auth
recover <username>

l 
使用Web控制台管理账户

打开http://<your-server>/people/ 管理账户

l 
手动创建新账户

这里有两种方式创建用户,第一种是通过web用户界面http://<your-server>/people/ ,另外一种是通过CLI使用accountadmin可执行文件:

phabricator/$
./bin/accountadmin

 

Ø 
Configuring
Outbound Mail

Phabricator 可以通过多种方式发送邮件,称为Adapter。这里使用External SMTP,配置已经在安装脚本中写好,只需要设置好对应的参数,不再需要手动配置。如果需要使用其它邮件发送方式,可以查看官方文档。

 

Ø 
Diffusion
User GuideRepository
Hosting

Phabricator 支持GitSubversion等版本控制工具,可以通过HTTPSSH对其中托管的库进行读写访问验证。这里我们使用Git版本控制工具并通过SSH进行访问。配置已经在安装脚本中完成,但每个Phabricator用户还需要在Phabricator中添加公钥。步骤如下:

l 
生成密钥

运行命令ssh-keygen–t rsa –C “Comment message”

l 
上传到Phabricator

登录到Phabricator,打开http://<your-server>/settings/panel/ssh
,点击UploadPublic Key,将刚才生成的密钥公钥内容~/.ssh/id_rsa.pub复制进去。

 

3)   Jenkins 配置

Jenkins安装完成后,进入http://<your-server>:8080/manage
配置Jenkins,在这个页面可以完成配置系统,全局安全设置,从磁盘重新加载配置信息,管理插件,显示系统信息,显示系统日志,显示统计信息,命令行工具,脚本控制台,管理节点,管理认证,关于Jenkins,管理旧数据,管理用户和关闭jenkins等任务。以下是各个任务的简要介绍。

配置系统中,可能由于没有安装某些插件而缺少相应的配置选项,只需要在插件管理部分安装插件即可。对于我们的目标,我们首先需要安装gitplugin, git clientplugin, git serverplugin,git
parameter plugin,build authorization token root plugin, build with parameters,
post build script plugin, phabricator differential plugin
cobertura
plugin
。安装方法可以查看插件管理部分

 

a)        
Configure System

Jenkins 的一些基本配置内容可以查看文件/etc/sysconfig/jenkins

系统配置最上面显示了Jenkins所在目录

点击后面的advances可以配置工作目录和日志保存目录

Workspace root Directory:设置每次构建工作区的目录

Build Record Root Directory:设置每次构建日志的目录

工程名称设置,可以要求工程名称符合某种格式

全局属性:这里可以添加一些环境变量,之后在任务中可以引用,还可以添加一些工具,只需要填写工具的名称和所在目录。

Maven:可以设置所使用的Maven来源,默认选项或者自己设置maven所在路径

如果我们之前已经安装了JDK,那么这里使用默认选项即可,也可以指定JAVA_HOME 的路径。

上面由于可执行程序git已经在系统PATH路径中,所以可以不使用完整路径。

后面的ANTMaven安装类似,这里不再讲述。截图如下:

Jenkins URL:设置Jenkins的网络地址

Email Add:设置jenkinsemail地址。

Git plugin CVS使用默认配置

Email配置:设置发送邮件的smtp服务器,应特别注意,缺省邮箱后缀

点击Advanced可以配置smtp认证,包括用户名,用户密码,缺省编码等。

Test configuration by sending test e-mail:通过发送邮件测试配置是否成功,点击Test
Configuration
,如果成功会显示Email was successfully sent,否则下面会报错,出错时请认真看下面的出错提示,可能错误是SMTP server 没有配置对,默认是localhost,或者是某些服务没有打开,或者是端口已经被其他程序占用,默认端口是25,可以不填写,另外重启一下也可能就成功。

到这里之后点击apply或者save保存设置,如果出现错误,根据错误提示进行更正即可。

 

b)        
Configure global security

这里主要完成一些关于系统安全和访问权限的配置,勾选Enable security才可以配置,否则不启用其机制。前面的一般使用默认配置,如下图

Disable remember me:如果勾选,每次登陆都需要输入用户名和密码

Delegate to servlet container:使用容器的用户,tomcat也可以添加用户,这里不讨论。

Jenkins’s own user database:使用jenkins自身的账户,需要勾选Allow users to sign up以允许注册

上面还有用户访问权限设置,有下面一些选项:

Anyone can do anythins:任何人可以做任何事

Legacy mode:如果是管理员,则拥有所有权限,其他用户或匿名用户都只有读权限

Logged-in users can do anythin:登录用户可以做任何事

Matrix-based security:基于矩阵的安全,功能看点击后面蓝色问号后的提示,见下图:

Project-based Matrix Authorization strategy:基于工程的矩阵授权策略,和上面基于矩阵的区别不大,只是基于工程的可以对各个工程进行不同的权限配置,而上面的是对所有jobs都一样。

 

Disable syntax highlighting:是否启用html语法高亮

 

c)        
Reload Configuration from Disk

重新从磁盘加载配置信息。

d)        
Manage plugins

管理各种插件,包括安装,升级,删除等等。

如上图所示,Updates表示已安装可升级插件,Available表示可用但未安装插件,Installed表示已安装插件,Advanced里面可以从本地安装插件。如果Available界面没有任何可用更新,可能是更新网址不正确。进入Advanced界面更改更新网址为https://updates.jenkins-ci.org/current/update-center.json

点击Check
Now
检查是否有可用更新和可用插件。

Available列表里有很多可选插件,插件是按照类型分类,按字母序排序的。类型包括有Artifact Uploaders上传文件插件,Authentication and
User Management
认证和用户管理类插件,Build Notifiers构建提示插件,构建报告插件等等。如下图所示,点击类型名可以展开此类型下所有可用的插件,每个插件都有简要的功能介绍。

 

勾选所有想要安装的插件,下拉到最后,可以点击安装,安装完成后重启jenkins即可,如下图:

e)        
System information

这里主要显示了一些系统属性,环境变量,已安装的插件汇总等信息。

f)         
System log

主要显示了系统的日志

g)        
Load statistics

一些统计数据,例如节点数目,正在运行的节点数,构建队列长度等信息。

h)        
Jenkins CLI

命令行接口,需要下载jenkins-cli.jar文件。将在jenkins cli命令行使用简介.doc中详细介绍。

i)          
Script console

脚本控制台,通过执行脚本和jenkins交互。

j)          
 Manage Nodes

节点管理,我们暂时只有一个master节点,不介绍多节点的使用。

k)        
Manager credential

增加,修改或者删除认证,可用于jenkinsjenkins
job
和第三方服务的验证。

l)          
About jenkins

介绍了jenkins的版本信息,还有所依赖的第三方库列表和license

m)      
Manager Old Data

管理旧数据,具体介绍看jenkins的解释

n)        
Manager Users

管理用户,这个要在Configure Global security中选中允许用户注册才可以使用

这里显示了已经注册的用户,已登录的用户后面没有红色删除标记,但可以删除其他用户,点击后面蓝色的配置标记可以进入相应用户的配置。

o)        
Prepare for shutdown

关掉jenkins

三、 JenkinsPhabricator集成

1.
安装配置

集成JenkinsPhabricator需要在Jenkins中安装PhabricatorDifferential
Plugin
插件,配置过程如下:

Phabricator中新建robot用户Jenkins

新建用户完成后,进入Jenkins用户界面http://<your-server>/p/jenkins
,点击右边的Edit Settings,再点击Conduit API Tokens,点击Generate API Token,复制生成的Token。进入到Jenkins系统配置页面http://<your-server>:8080/configure
,找到Phabricator部分,添加Credentials,填写PhabricatorURL 并将之前生成的Token粘贴到此处。

由于 Jenkins 中使用的系统用户是jenkins,也需要把jenkins 用户的 SSH Public Key 上传到 Phabricator。方法如下:

切换到 Jenkins 用户并生成密钥:

su Jenkins

ssh-keygen t rsa C jenkins@phabricator
server

然后进入 http://<your-server>/settings/panel/ssh 点击 Upload Public Key,将刚才生成的密钥上传到 Phabricator

2. 使用

Phabricator
新建Repositoryhttp://<your-server>/diffusion/new新建一个Repository

1.
Clone
该库至本地,执行git commit –allow-empty -m
"initial empty commit"

2.
git push origin master

Jenkins
http://<your-server>:8080/view/All/newJob 中新建对应该DiffusionJob,名称为hello-worldfree-style

由于需要将构建结果返回给Phabricator,这里需要添加两个String参数DIFF_IDPHID

 

在源代码管理中,选择GitRepository
URL
填写git clone
Phabricator Diffusion
时的后半部分,由于已经上传了
Jenkins 用户的公钥到Phabricator,这里不需要认证。

上面的name表示库的ID,例如origin,用于和其它远端库区分。Refspec用于指定获取远端的哪些refs以及和本地refs对应。如果留空,则和git fetch 效果相同。

Branches to build:指定要跟踪的分支,如果留空,则会检查构建所有分支。

BuildTriggers
部分,勾选Triggerbuilds
remotely
,这样可以通过URL触发构建。也就是后面Phabricator 发出一个URLPOST请求触发构建。这里填写一个验证令牌,用于PhabricatorURL触发时认证。记住下面jenkins提示的Use the following URL to
trigger build remotely
http://<your-server>:8080/job/hello-world/buildWithParameters?token=TOKEN_NAME&param1=value1&param2=value2

Build部分,填写需要构建的具体内容,例如编译,单元测试,集成测试等。这里打印两个参数的值。

Post-buildActions
部分,添加Post to
Phabricator
,将构建结果返回给Phabricator

Phabricator 中新建 Harbormaster
build plan

http://<your-server>/harbormaster/plan/edit

在该plan中添加 build step

填写名称,由于该build step action 就是发送一个URLPOST 请求,这里使用MakeHTTP Request,然后在下面的URI中填写之前Jenkins提示的,因为Jenkins根据PHIDPhabricator返回构建结果,这里需要传递PHID作为参数:

http://<your-server>:8080/job/hello-world/buildWithParameters?token=hello-world-token&DIFF_ID=${buildable.diff}&PHID=${target.phid}

HTTP
Method
部分选择POST,在WhenComplete 中选择WaitFor Message,等待Jenkins返回结果再进行下一个build step。点击SaveBuild Step保存构建步骤。

在下面还列出了其它Phabricator可以传递给Jenkins的参数以及参数解析。

Phabricator中添加Herald规则

http://<your-server>/herald/new
创建Herald规则:

可以针对多种情况创建Herald规则,例如commitdiff或者revision等。最主要的就是这三个。这里我们为Differential Revisions
创建一个Herald规则,当新建或者更新revision 时触发build step 从而发出HTTP POST 请求让Jenkins执行构建。

Rule
Name
填写规则名称,在Condition 部分添加条件,在 Action 部分添加满足上面的条件时需要执行的操作。例如当有hello-world 库有revision创建或者更新,且Authorluoyuanhao时,执行build plan,可以按照如下方式创建Herald 规则:

5.
创建revision触发jenkins构建

用户luoyuanhao
clone Phabricator
hello-world
Repository
,更新了代码并用arc
diff
创建revision

这时满足Herald规则Runjenkins 的条件,就会run build planbuild hello-worldbuild hello-world 其实就是向Jenkins发出一个带参数的HTTP POST请求。从而激活Jenkins hello-world jobJenkins hello-world 就从指定的Git库中拉取代码,并逐步执行Build部分指定的操作,当所有Build部分都成功完成或者某个步骤出错时,进入Post-build
actions
部分,即将build 结果返回给Phabricator

可以在Jenkins Build 控制台输出查看构建的详细步骤。

可以在http://<your-server>/harbormaster/query/all 处查看Jenkins返回的结果:

四、 Reference

Phabricator User Documentation

Use Jenkins

Jenkins The Definitive Guide

Jenkins Plugins

Phabricator Differential Plugin


发表评论

电子邮件地址不会被公开。