(八)与GitHub相互协作的工具及服务

🛠️ 与GitHub相互协作的工具及服务

8.1 hub 命令

hub 命令 是一个封装了 git 命令的命令行工具,能够辅助用户使用 GitHub。它由 Chris Wanstrath 带头开发,旨在简化 GitHub 的操作。

概要

  • hub 命令 封装了 git 命令,并增加了调用 GitHub API 的功能。
  • 可以使用简略路径替代完整路径来指定 GitHub 端仓库。

安装

  • 系统要求
    • Git 1.7.3 以上
    • Ruby 1.8.6 以上
  • 安装方法
    • OS X:通过 Homebrew 或 MacPorts 安装。

      bashCopy

      brew install hub # Homebrew sudo port install hub # MacPorts

    • 其他环境

      bashCopy

      curl https://hub.github.com/standalone -sLo ~/bin/hub chmod +x ~/bin/hub echo 'export PATH=$PATH:~/bin' >> ~/.bash_profile

确认运行情况

bashCopy

hub --version

输出显示 git 和 hub 的版本号。

设置别名

将 git 设置为 hub 的别名:

bashCopy

eval "$(hub alias -s)"

功能补全

GitHub 提供了面向 bash 和 zsh 的脚本,用于增强 hub 命令的功能。

OAuth 认证

初次访问 GitHub API 时,hub 会进行 OAuth 认证,并将 Token 保存在 ~/.config/hub 中。

常用命令

命令功能描述
hub clone简化 GitHub 仓库的克隆操作,无需指定完整路径。
hub remote add添加远程仓库时,省略 GitHub 端仓库的指定部分。
hub cherry-pick通过 URL 获取提交并应用到当前分支。
hub fork在本地克隆的仓库上执行 Fork 操作,生成自己的远程仓库。
hub pull-request创建 Pull Request,无需访问 GitHub 页面。
hub checkout通过 Pull Request 的 URL 将接收到的分支 checkout 到本地。
hub create在 GitHub 上创建同名仓库,并设置为本地仓库的远程仓库。
hub push同时向多个远程仓库进行 push 操作。
hub browse在浏览器中打开当前操作的 GitHub 仓库页面。
hub compare查看当前特性分支与 master 分支的差别。

GitHub Enterprise 支持

bashCopy

git config --global --add hub.host my.example.org

将 my.example.org 替换为 GitHub Enterprise 的主机名。

8.2 Travis CI

Travis CI 是一款免费服务,专门托管面向开源开发组织的持续集成(CI)。

概要

  • CI 是极限编程(XP)的实践之一,用于在提交后立即执行自动测试或构建。
  • 支持 Ruby、PHP、Perl、Python、Java、JavaScript 等语言。

配置文件

编写 .travis.yml 文件:

yamlCopy

language: ruby rvm: - 1.9.2 - 1.9.3 script: bundle exec rspec spec

检测配置文件

使用 Travis WebLint 检测 .travis.yml 文件是否存在问题。

与 GitHub 集成

  1. 访问 Travis CI 网站,使用 GitHub 账号登录。
  2. 在仓库列表中启用 Travis CI。
  3. 在 GitHub 的 Webhooks & Services 页面配置 Travis CI。

执行结果

  • 通过邮件或 IRC 接收 Travis CI 的执行结果。
  • 在 README.md 中添加 Travis CI 的状态图:

    markdownCopy

    [![Build Status](https://secure.travis-ci.org/用户名/仓库名.png)](http://travis-ci.org/用户名/仓库名)

8.3 Coveralls

Coveralls 是由 Lemur Heavy Industries 运营的代码覆盖率检测服务。

概要

  • 支持 Ruby/Rails、Python、PHP、JavaScript/Node.js、C/C++、Java、Scala 等语言。
  • 为每个 Pull Request 生成代码覆盖率报告。

安装

  • 前提条件
    • 源代码保存在 GitHub 上。
    • 已集成 Travis CI 或 Jenkins 等服务。

注册与添加仓库

  1. 访问 Coveralls 首页,通过 GitHub 注册账户。
  2. 点击 ADD REPO 添加需要生成覆盖率报告的仓库。

🛠️ Coveralls 配置与使用

仓库设置

在 Coveralls 页面中,可以通过将仓库名右边的开关设置为 ON 来添加仓库。添加后,仓库将成为报告对象。

编写配置文件

Coveralls 的配置文件是 .coveralls.yml,需将其放置在仓库路径下。文件内容如下:

yamlCopy

service_name: travis-ci

  • service_name:如果使用其他持续集成服务器(如 Jenkins),需根据实际情况修改为简单易懂的名称。
  • repo_token:在使用其他持续集成服务器时,需将 repo_token 描述为 repo_token:xxxxxyyyyyzzzz 的形式。repo_token 可以在 Coveralls 的配置解说页面中找到。

添加 gem

如果使用 Ruby 或 Rails,需在 Gemfile 中添加以下内容:

rubyCopy

gem 'coveralls', require: false

并在测试工具的 helper 文件中(如 /spec/spec_helper.rb 或 /test/test_helper.rb)添加以下代码:

rubyCopy

require 'coveralls' Coveralls.wear!

对于 Rails 项目,需替换为以下代码:

rubyCopy

require 'coveralls' Coveralls.wear!('rails')

完成设置后,执行 bundle install 命令,并将所有修改过的文件提交。

查看报告

完成上述设置后进行 push 操作,Coveralls 会在 Travis CI 自动测试后生成报告。报告的 URL 为:

textCopy

https://coveralls.io/r/用户名/仓库名

Coveralls 还提供了让 README.md 显示相关信息的标记。在报告下部的 README BADGE 栏内,点击 Get badge URLs 即可获得 URL,将其添加到 README.md 文件中后,可以在 GitHub 上看到相同的图片。

📦 Gemnasium

Gemnasium 服务可以查询 GitHub 仓库中使用的 RubyGems 或 npm(Node Package Manager),帮助开发者了解是否正在使用最新版本进行开发。

功能

  • 版本管理:当库的版本升级时,Gemnasium 会第一时间通知开发者。
  • 版本差距:在 Gemnasium 的网站上会列出正在使用的 RubyGems 及其与最新版本的差距。

使用场景

例如,使用 octokit 库时,若 GitHub 对 API 做了修改,octokit 会升级版本以应对。Gemnasium 会及时通知开发者新版本的发布。

费用

  • Public 仓库:免费使用。
  • Private 仓库:需支付一定费用。

🌡️ Code Climate

Code Climate 是一款代码分析报告服务,目前仅支持 Ruby。它可以分析 GitHub 仓库中的软件,查出质量有问题的代码,并给软件品质评级。

功能

  • 代码分析:对容易出现 BUG 的复杂部分发出警告。
  • 评级系统:如果不进行重构,评级会逐渐下降,督促开发者编写高品质代码。

费用

  • 收费服务:提供 14 天的免费试用期。

🏗️ Jenkins 与 GitHub 集成

概要

Jenkins 是代表性的持续集成服务器,可以通过与 GitHub 集成,自动测试 Pull Request 并将结果发送至 GitHub。

安装

  • 下载安装包:从 Jenkins 官方网站下载适合当前操作系统的安装包。
  • 安装与启动:使用标准安装方法安装后,Jenkins 会随操作系统一起启动,默认使用 8080 端口。

创建 bot 账户

  • 新建账户:在 GitHub 上新建一个账户,用于 Jenkins 获取源代码和发送测试结果。
  • 生成密钥:创建 bot 账户专用的公开密钥和私有密钥,密钥的密码短语需留空。

权限设置

  • 公开仓库:需拥有写入权限。
  • 非公开仓库:需拥有读取和写入权限。

配置 SSH 密钥

  • 初次使用 Jenkins:安装包会自动生成 jenkins 用户,私有密钥会自动配置。
  • 已使用 Jenkins:需在 ~/.ssh/config 中写入 SSH 客户端的相关设置,为 SSH 访问特定主机时设置对应的私有密钥。

安装 GitHub pull request builder plugin

该插件可以在 Jenkins 内部构建出 Pull Request 合并之后的状态并执行自动测试,结果会自动发送到 GitHub。

创建与设置 job

  • GitHub project:输入 GitHub 仓库的 URL。
  • 源码管理:选择 Git,填写 Repository URL。
  • 构建触发器:设置让任务开始执行的触发器,如每 5 分钟检查一次 Pull Request。
  • 构建:设置执行自动测试等作业的流程。

通知结果

自动测试的结果会由 GitHub pull request builder plugin 发送到 GitHub,使用 Commit Status API 显示最新提交的状态。

🛠️ Pull Request 的状态

测试执行中的状态

当接收到 Pull Request 后,如果自动测试仍在执行中且无法确定状态,则会显示为图 8.26 的样子。此时需要等待 GitHub 接收到测试结果,状态才会被更新。

测试未通过的状态

如果有某项测试没有通过,则会显示为图 8.27 的状态。此时可以点击 Details 链接查看详细内容,找出未能通过测试的问题所在。注意: 在这个状态下,千万不能合并 Pull Request

测试全部通过的状态

如果测试全部正常通过,会如图 8.25 中那样以绿色显示。之后只要代码审查等工作没有发现问题,就可以合并 Pull Request。

Commit 状态

GitHub Pull Request Builder Plugin 会根据最新的提交来执行任务,但也会记录过去的提交状态。如果测试未通过,该提交会像图 8.28 里那样被标上 "

KaTeX can only parse string typed expression

x"。

将其修正并再次 push 后,会如图 8.29 中那样标上绿色对勾。

提交记录示例

KaTeX can only parse string typed expression

KaTeX can only parse string typed expression

KaTeX can only parse string typed expression

Fix rake

KaTeX can only parse string typed expression

× fb66eo9

KaTeX can only parse string typed expression

Fix spec

KaTeX can only parse string typed expression

✓ Scs34f3

根据这些结果记录,可以直观地分辨出哪些提交引起了测试结果的变化,帮助开发者迅速辨明问题所在。

通过评论进行控制

在 GitHub 的 Pull Request 中填写特定评论可以控制 GitHub Pull Request Builder Plugin

执行任务

  • 如果 Admin list 和 White list 名单之外的用户发来 Pull Request,bot 账户会询问:"Can one of the admins verify this patch?"。这种情况下任务不会自动执行。
  • Admin list 名单中的用户可以通过发送 "ok to test" 的评论让任务开始执行。如果发送评论的用户不在 Admin list 当中,则会被 bot 账户忽略。
  • 如果发送 Pull Request 的用户在 White list 之中,则任务会自动开始执行。

添加至 White list

如果想将发送 Pull Request 的用户添加至 White list,就用 Admin list 名单中的用户发送 "add to whitelist" 的评论。今后这个用户发来 Pull Request 时,任务都会被自动执行。

重新执行任务

如果遇到某些情况需要重新执行任务,只要 Admin list 或 White list 名单中的用户发送 "retest this please" 的评论即可。

变更指定评论

指定评论的内容可以在 系统管理 

KaTeX can only parse string typed expression

→ 系统设置 

KaTeX can only parse string typed expression

→ Github Pull Requests Builder 

KaTeX can only parse string typed expression

→ 高级 中进行更改。

专栏:用 Coderwall 生成 GitHub 上的个人信息

Coderwall 是由社区众筹的方式开发、运营的一款服务,它可以根据 GitHub 的仓库信息等为开发者免费生成个人信息,同时根据在 GitHub 上的业绩与成就给开发者颁发勋章。

功能概述

  • 个人信息生成:Coderwall 可以根据 GitHub 的仓库信息生成开发者的个人信息。
  • 勋章系统:根据开发者在 GitHub 上的业绩与成就颁发勋章,这些勋章可以嵌入到博客等网站中展示。
  • Teams 功能:展示各团队的资料、成绩和文化,吸引志同道合的同伴,也可以查看其他团队的程序员及其开发项目。

相关链接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值