6.5 腳本 GitHub

2018-02-24 15:22 更新

腳本 GitHub

所以現(xiàn)在我們已經(jīng)介紹了 GitHub 的大部分功能與工作流程,但是任意一個小組或項(xiàng)目都會去自定義,因?yàn)樗麄兿胍獎?chuàng)造或擴(kuò)展想要整合的服務(wù)。

對我們來說很幸運(yùn)的是,GitHub 在許多方面都真的很方便 Hack。 在本節(jié)中我們將會介紹如何使用 GitHub 鉤子系統(tǒng)與 API 接口,使 GitHub 按照我們的設(shè)想來工作。

鉤子

GitHub 倉庫管理中的鉤子與服務(wù)區(qū)塊是 GitHub 與外部系統(tǒng)交互最簡單的方式。

服務(wù)

首先我們來看一下服務(wù)。 鉤子與服務(wù)整合都可以在倉庫的設(shè)置區(qū)塊中找到,就在我們之前添加協(xié)作者與改變項(xiàng)目的默認(rèn)分支的地方。 在 “Webhooks and Services” 標(biāo)簽下你會看到與?Figure?6-49類似的內(nèi)容。

Figure?6-49?中的 “Add webhook” 按鈕。 這會將你引導(dǎo)至一個類似Figure?6-51?的頁面。

?的 GitHub 開發(fā)者文檔。

GitHub API

服務(wù)與鉤子給你提供了一種方式來接收關(guān)于在倉庫中發(fā)生的事件的推送通知,但是如何獲取相關(guān)事件的詳情呢?如何自動化一些諸如添加協(xié)作者或給問題加標(biāo)簽的事情呢?

這是 GitHub API 派上用場的地方。 在自動化流行的趨勢下,GitHub 提供了大量的 API 接口,可以進(jìn)行幾乎任何能在網(wǎng)站上進(jìn)行的操作。 在本節(jié)中我們將會學(xué)習(xí)如何授權(quán)與連接到 API,如何通過 API 在一個問題上評論與如何修改一個 Pull Request 的狀態(tài)。

基本用途

可以做的最基本的事情是向一個不需要授權(quán)的接口上發(fā)送一個簡單的 GET 請求。 該接口可能是一個用戶或開源項(xiàng)目的只讀信息。 例如,如果我們想要知道更多關(guān)于名為 “schacon” 的用戶信息,我們可以運(yùn)行類似下面的東西:

$ curl https://api.github.com/users/schacon
{
  "login": "schacon",
  "id": 70,
  "avatar_url": "https://avatars.githubusercontent.com/u/70",
# …
  "name": "Scott Chacon",
  "company": "GitHub",
  "following": 19,
  "created_at": "2008-01-27T17:19:28Z",
  "updated_at": "2014-06-10T02:37:23Z"
}

有大量類似這樣的接口來獲得關(guān)于組織、項(xiàng)目、問題、提交的信息?—?差不多就是你能在 GitHub 上看到的所有東西。 甚至可以使用 API 來渲染任意 Markdown 或?qū)ふ乙粋€?.gitignore?模板。

$ curl https://api.github.com/gitignore/templates/Java
{
  "name": "Java",
  "source": "*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
"
}

在一個問題上評論

然而,如果想要在網(wǎng)站上進(jìn)行一個操作,如在 Issue 或 Pull Request 上評論,或者想要查看私有內(nèi)容或與其交互,你需要授權(quán)。

這里提供了幾種授權(quán)方式。 你可以使用僅需用戶名與密碼的基本授權(quán),但是通常更好的主意是使用一個個人訪問令牌。 可以從設(shè)置頁的 “Applications” 標(biāo)簽生成訪問令牌。

希望這相當(dāng)容易做。 在這個 web 鉤子處理器中我們?yōu)g覽剛剛推送上來的每一個提交,在提交信息中查找字符串?Signed-off-by?并且最終使用 HTTP 向/repos/<user>/<repo>/statuses/<commit_sha>?API 接口發(fā)送一個帶有狀態(tài)的 POST 請求。

在本例中可以發(fā)送一個狀態(tài)(success,?failure,?error)、一個發(fā)生了什么的描述信息、一個用戶可以了解更多信息的目標(biāo) URL 與一個 “context” 以防一個單獨(dú)的提交有多個狀態(tài)。 例如,一個測試服務(wù)可以提供一個狀態(tài)與一個類似這樣的驗(yàn)證服務(wù)也可能提供一個狀態(tài)?—?“context” 字段是用來區(qū)別它們的。

如果某人在 GitHub 中打開了一個新的 Pull Request 并且這個鉤子已經(jīng)設(shè)置,會看到類似Figure?6-55?的信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號