## 關于自動化構建
自動化構建是一個特殊的功能,它允許您在 Docker Hub 上使用構建集群,根據指定的?`Dockerfile`?或者 GitHub 、 BitBucket 倉庫(或環境)來自動創建鏡像。該系統將從倉庫復制一份,并根據以倉庫為環境的?`Dockerfile`?的描述構建鏡像。由此產生的鏡像將被上傳到注冊表,并且自動生成標記。
自動化構建有許多優勢:
* 你的自動化構建項目一定是準確按照預期構建的
* 在 Docker Hub 注冊表上,任何擁有你倉庫訪問權限的用戶都樂意瀏覽?`Dockerfile`
* 自動化構建保證了你的倉庫總是最新的
自動化構建支持?[GitHub](http://github.com/)?和?[BitBucket](https://bitbucket.org/)?的私有和公有的倉庫。
要使用自動化構建,你必須擁有經過驗證有效的 Docker Hub 賬戶和 GitHub/Bitbucket 賬戶。
## 設置GitHub自動化構建
首先,你需要將 GitHub 賬戶鏈接到你的?[Docker Hub](https://hub.docker.com/)?賬戶,以允許注冊表查看你的倉庫。
> 注:目前我們需要有讀寫權限以建立 Docker Hub 和 GitHub 的掛鉤服務,這是GitHub管理權限的方式,我們別無選擇。抱歉!我們將保護您的賬戶及隱私,確保不會被他人非法獲取。
開始構建!登錄到你的 Docker Hub 賬戶,點擊屏幕右上方的 "+ Add Repository" 按鈕,選擇[自動化構建](https://registry.hub.docker.com/builds/add/)。
選擇[GitHub服務](https://registry.hub.docker.com/associate/GitHub/)
然后按照說明授權和連接你的 GitHub 賬戶到 Docker Hub。連接成功后,你就可以選擇用來自動化構建的倉庫了。
### 創建一個自動化構建項目
你可以用你的?`Dockerfile`?從你的公共或者私有倉庫[創建一個自動化構建項目](https://registry.hub.docker.com/builds/GitHub/select/)。
### GitHub子模塊
如果你的 GitHub 倉庫包含了私有子模塊的連接,你需要在 Docker Hub 上添加部署秘鑰。
部署秘鑰位于自動化構建主頁的 “Build Details” 菜單。訪問設置 GitHub 倉庫的頁面,選擇 “Deploy keys” 來添加秘鑰。
| Step | Screenshot | Description |
| --- | --- | --- |
| 1. |  | 你的自動化構建部署秘鑰位于 “Build Details” 菜單的 “Deploy keys” 下。 |
| 2. |  | 在你的 GitHub 子模塊倉庫設置頁,添加部署秘鑰。 |
### GitHub組織
一旦你的組織成員身份設置為公開,對應的 GitHub 組織狀態便會被公開在你的 GitHub 上。為了驗證,你可以查看 GitHub 上你的組織的成員選項卡。
### GitHub服務掛鉤
按照以下步驟配置自動化構建的 GitHub 服務掛鉤:
| Step | Screenshot | Description |
| --- | --- | --- |
| 1 | [](https://github.com/widuu/chinese_docker/blob/master/images/GitHub_settings.png) | 登錄到 GitHub.com,并轉到您的倉庫頁面,點擊右側頁面“Settings”。 執行該操作要求你有該倉庫的管理員權限。 |
| 2 |  | 點擊頁面左側的“Webhooks & Services”。 |
| 3 |  | 找到 "Docker" 并點擊它. |
| 4 |  | 確認 "Active" 被選中,然后點擊 “Update service” 按鈕以保存您的更改。 |
## 設置BitBucket自動化構建
為了設置自動化構建,你需要先把 BitBucket 連接到你的 Docker Hub 賬戶,以允許其訪問你的倉庫。
登錄到你的 Docker Hub 賬戶,點擊屏幕右上方的 "+ Add Repository" 按鈕,選擇[自動化構建](https://registry.hub.docker.com/builds/add/)。
選擇的?[Bitbucket 服務](https://registry.hub.docker.com/associate/bitbucket/)。
然后按照說明授權和連接你的 Bitbucket 賬戶到 Docker Hub。連接成功后,你就可以選擇用來自動化構建的倉庫了。
### 創建自動化構建項目
你可以用你的?`Dockerfile`?從你的公共或者私有倉庫[創建一個自動化構建項目](https://registry.hub.docker.com/builds/bitbucket/select/)。
### Bitbucket服務掛鉤
當你成功連接賬戶以后,一個?`POST`?掛鉤將會自動被添加到你的倉庫。請按照以下步驟確認或者更改你的掛鉤設置:
| Step | Screenshot | Description |
| --- | --- | --- |
| 1 |  | 登錄到 Bitbucket.org 進入倉庫頁面。點擊左側導航下的 “Settings”。執行該操作要求你有該倉庫的管理員權限。 |
| 2 |  | 點擊左側 “Settings” 下的 "Hooks"。 |
| 3 |  | 現在你應該能看到關聯了該倉庫的掛鉤列表,包括一個指向 registry.hub.docker.com/hooks/bitbucket 的?`POST`?掛鉤。 |
## [](https://github.com/widuu/chinese_docker/blob/master/docker-hub/builds.md#dockerfile和自動化構建)Dockerfile和自動化構建
在構建過程中,我們將復制?`Dockerfile`?的內容。我們也將添加它到 Docker Hub 上,使得 Docker 社區(公共倉庫)或者得到許可的團隊成員可以訪問倉庫頁面。
## README.md
如果你的倉庫有一個?`README.md`?文件,我們將使用它作為倉庫的描述。構建過程中會尋找?`Dockerfile`?同一目錄下的`README.md`。
> 警告:如果你需要在創建之后修改描述,它會在下一次自動化構建完成之后生效。
### 建立觸發器
如果你需要 GitHub 或者 BitBucket 以外的方式來觸發自動化構建,你可以創建一個構建觸發器。當你打開構建觸發器,它會提供給你一個 url 來發送 POST 請求。這將觸發自動化構建過程,類似于 GitHub webhook。
建立觸發器可在自動化構建項目的 Settings 菜單中設置。
> 注:你在五分鐘內只能觸發一個構建,如果你已經進行一個構建,或你最近提交了構建請求,這些請求將被忽略。你可以在設置頁面來找到最后10條觸發日志來驗證是否一切正常工作。
### Webhooks
也可以使用 Webhooks 來自動化構建,Webhooks 會在倉庫推送成功后被調用。
此webhook調用將生成一個 HTTP POST,JSON樣例如下:
~~~
{
"push_data":{
"pushed_at":1385141110,
"images":[
"imagehash1",
"imagehash2",
"imagehash3"
],
"pusher":"username"
},
"repository":{
"status":"Active",
"description":"my docker repo that does cool things",
"is_automated":false,
"full_description":"This is my full description",
"repo_url":"https://registry.hub.docker.com/u/username/reponame/",
"owner":"username",
"is_official":false,
"is_private":false,
"name":"reponame",
"namespace":"username",
"star_count":1,
"comment_count":1,
"date_created":1370174400,
"dockerfile":"my full dockerfile is listed here",
"repo_name":"username/reponame"
}
}
~~~
Webhooks 可在自動化構建項目的 Settings 菜單中設置。
> 注意:如果你想測試你的 webhook,我們建議使用像?[requestb.in](http://requestb.in/)?的工具。
### 倉庫鏈接
倉庫鏈接是一種建立自動化項目與項目之間關聯的方式。如果一個項目得到更新,連接系統還會觸發另一個項目的更新構建。這使得你可以輕松地讓所有關聯項目保持更新同步。
要添加鏈接的話,訪問你想要添加鏈接的項目的倉庫設置頁面,在設置菜單下地右側點擊 “Repository Links”。然后輸入你想要與之鏈接的倉庫名稱。
> 警告:您可以添加多個倉庫的鏈接,但要小心。自動化構建之間的雙向關系會造成一個永不停止的構建循環。
- 關于Docker
- 鏡像簡介
- 安裝篇
- Mac OS X
- Ubuntu
- Red Hat Enterprise Linux
- CentOS
- Debain
- Gentoo
- Google Cloud Platform
- Rackspace Cloud
- Amazon EC2
- IBM Softlayer
- Arch Linux
- FrugalWare
- Fedora
- openSUSE
- CRUX Linux
- Microsoft Windows
- Binaries
- 用戶指南
- 使用Docker Hub
- 在Docker中運行應用
- 使用容器
- 使用docker鏡像
- 連接容器
- 管理容器數據
- 使用Docker Hub
- Docker Hub
- 賬戶
- 存儲庫
- 自動構建
- 官方案例
- Docker中運行MongoDB
- Docker中運行Redis服務
- Docker中運行PostgreSQL
- Docker中運行Riak服務
- Docker中運行SSH進程服務
- Docker中運行CouchDB服務
- Docker中運行Apt-Cacher-ng服務