Jenkins Phabricator 集成
一、 简介
1. 持续集成
2. Jenkins
3. Phabricator
二、 搭建
2. 环境搭建
1) 安装 Jenkins 和 Phabricator
2) Phabricator
配置
3) Jenkins
配置
三、 Jenkins 和 Phabricator 集成
1. 安装配置
一、 简介
1.
持续集成
一种软件开发实践,即团队的成员经常集成他们的工作,通常每个成员每天至少集成一次,这导致每天发生多次集成。每次集成都通过自动化的构建 ( 包括测试 ) 来验证,从而尽快地检测出集成错误。许多团队发现这个过程会大大减少集成问题,让团队能够更快地开发内聚的软件。本质上说,持续集成就是通过快速的反馈降低风险。
2. Jenkins
CVS, Subversion,
Git, Mercurial, Perforce, Clearcase
和 RTC, 并能执行基于 Apache Ant 和 Apache Maven 的项目。另外,它能通过多种方法开始构建,例如 , 由版本控制系统触发,由 cron-like 机制调度,由远程命令触发,或者通过一个 URL 。3. Phabricator
Herald
变化检测工具、 Bug 跟踪、 Phriction Wiki 。 Phabricator 集成了 Git 、 Mercurial 、和 Subversion 版本控制工具。它在 Apache License 2 协议下发布的自由软件。4. 目标
我们的目标是采用 Git + Phabricator+ Jenkins 模式,实现 Git 托管代码, Phabricator 进行代码审查、 Bug 跟踪, Jenkins 集成构建的流程。通过 Phabricator 和 Jenkins 的强大功能,完善代码管理和编译,测试以及部署,提高软件质量并加速软件开发。
二、 搭建
1. 所需的软件
为了搭建一个完整的持续集成系统,我们需要如下软件:
Apache : Internet 上最流行的 Web 服务器软件,仅支持静态网页
PHP :在服务器端执行的嵌入 HTML 文档的脚本语言
MariaDB/MySQL :数据库管理系统
Git :版本控制系统的一个免费开源客户端
Jenkins :持续构建工具
Phabricator : Code review 工具
以下分别是这些软件的安装配置和使用方法的简要介绍。
2.
环境搭建
1) 安装 Jenkins 和 Phabricator
具体内容查看安装脚本 install-jenkins-phabricator.sh 。
2) Phabricator 配置
安装完成后,打开 http://<your-server > ,首先注册一个管理员账户。
l Username/Password: 用户使用用户名和密码进行登录或注册
l LDAP: 用户使用 LDAP 认证进行登录或注册
l OAuth: 用户使用支持 OAuth2 的提供商账户(例如 Github 、 非死book 或 Google )进行登录或注册。
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
Phabricator 可以通过多种方式发送邮件,称为 “ Adapter ” 。这里使用 External SMTP ,配置已经在安装脚本中写好,只需要设置好对应的参数,不再需要手动配置。如果需要使用其它邮件发送方式,可以查看官方文档。
Phabricator 支持 Git 、 Subversion 等版本控制工具,可以通过 HTTP 和 SSH 对其中托管的库进行读写访问验证。这里我们使用 Git 版本控制工具并通过 SSH 进行访问。配置已经在安装脚本中完成,但每个 Phabricator 用户还需要在 Phabricator 中添加公钥。步骤如下:
l 生成密钥
运行命令 ssh-keygen–t rsa –C “Comment message”
l 上传到 Phabricator
3) 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 路径中,所以可以不使用完整路径。
后面的 ANT 和 Maven 安装类似,这里不再讲述。截图如下:
Jenkins URL :设置 Jenkins 的网络地址
Email Add :设置 jenkins 的 email 地址。
Git plugin 和 CVS 使用默认配置
Email 配置:设置发送邮件的 smtp 服务器,应特别注意,缺省邮箱后缀
点击 “ Advanced ” 可以配置 smtp 认证,包括用户名,用户密码,缺省编码等。
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
检查是否有可用更新和可用插件。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
jenkins
job
和第三方服务的验证。l) About jenkins
介绍了 jenkins 的版本信息,还有所依赖的第三方库列表和 license 。
m) Manager Old Data
管理旧数据,具体介绍看 jenkins 的解释
n) Manager Users
管理用户,这个要在 Configure Global security 中选中允许用户注册才可以使用
这里显示了已经注册的用户,已登录的用户后面没有红色删除标记,但可以删除其他用户,点击后面蓝色的配置标记可以进入相应用户的配置。
o) Prepare for shutdown
关掉 jenkins
三、 Jenkins 和 Phabricator 集成
1.
安装配置
PhabricatorDifferential
Plugin
插件,配置过程如下:在 Phabricator 中新建 robot 用户 Jenkins
由于 Jenkins 中使用的系统用户是 jenkins ,也需要把 jenkins 用户的 SSH Public Key 上传到 Phabricator 。方法如下:
切换到 Jenkins 用户并生成密钥:
su Jenkins
jenkins@phabricator
server
”
然后进入 http://<your-server>/settings/panel/ssh 点击 Upload Public Key ,将刚才生成的密钥上传到 Phabricator
2. 使用
Phabricator
新建 Repository 处 http://<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 中新建对应该 Diffusion 的 Job ,名称为 hello-world , free-style由于需要将构建结果返回给 Phabricator ,这里需要添加两个 String 参数 DIFF_ID 和 PHID :
Repository
填写git clone
时的后半部分,由于已经上传了,这里不需要认证。
上面的 name 表示库的 ID ,例如 origin ,用于和其它远端库区分。 Refspec 用于指定获取远端的哪些 refs 以及和本地 refs 对应。如果留空,则和 git fetch 效果相同。
Branches to build :指定要跟踪的分支,如果留空,则会检查构建所有分支。
BuildTriggers
部分,勾选Triggerbuilds
remotely
,这样可以通过 URL 触发构建。也就是后面 Phabricator 发出一个 URLPOST 请求触发构建。这里填写一个验证令牌,用于 Phabricator 或 URL 触发时认证。记住下面 jenkins 提示的Use the following URL to
trigger build remotely
: http://<your-server>:8080/job/hello-world/buildWithParameters?token=TOKEN_NAME¶m1=value1¶m2=value2
在 Build 部分,填写需要构建的具体内容,例如编译,单元测试,集成测试等 。这里打印两个参数的值。
Post-buildActions
部分,添加Post to
Phabricator
,将构建结果返回给 Phabricator 。
Harbormaster
build plan
http://<your-server>/harbormaster/plan/edit
在该 plan 中添加 build step :
填写名称,由于该 build step 的 action 就是发送一个 URLPOST 请求,这里使用 MakeHTTP Request ,然后在下面的 URI 中填写之前 Jenkins 提示的,因为 Jenkins 根据 PHID 向 Phabricator 返回构建结果,这里需要传递 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 规则
Differential Revisions
创建一个 Herald 规则,当新建或者更新 revision 时触发 build step 从而发出 HTTP POST 请求让 Jenkins 执行构建。
Rule
Name
填写规则名称,在 Condition 部分添加条件,在 Action 部分添加满足上 面的条件时需要执行的操作。例如当有 hello-world 库有 revision 创建或者更新,且 Author 是 luoyuanhao 时,执行 build plan ,可以按照如下方式创建 Herald 规则:
5.
创建 revision 触发 jenkins 构建luoyuanhao
clone Phabricator
的hello-world
Repository
,更新了代码并用arc
diff
创建 revision 。
Post-build
actions
部分,即将 build 结果返回给 Phabricator 。可以在 Jenkins Build 控制台输出查看构建的详细步骤。
可以在 http://<your-server>/harbormaster/query/all 处查看 Jenkins 返回的结果: