自動化構(gòu)建是一個特殊的功能,它允許您在 Docker Hub 上使用構(gòu)建集群,根據(jù)指定的 Dockerfile 或者 GitHub 、 BitBucket 倉庫(或環(huán)境)來自動創(chuàng)建鏡像。該系統(tǒng)將從倉庫復(fù)制一份,并根據(jù)以倉庫為環(huán)境的 Dockerfile 的描述構(gòu)建鏡像。由此產(chǎn)生的鏡像將被上傳到注冊表,并且自動生成標(biāo)記。
自動化構(gòu)建有許多優(yōu)勢:
Dockerfile自動化構(gòu)建支持 GitHub 和 BitBucket 的私有和公有的倉庫。
要使用自動化構(gòu)建,你必須擁有經(jīng)過驗證有效的 Docker Hub 賬戶和 GitHub/Bitbucket 賬戶。
首先,你需要將 GitHub 賬戶鏈接到你的 Docker Hub 賬戶,以允許注冊表查看你的倉庫。
注:目前我們需要有讀寫權(quán)限以建立 Docker Hub 和 GitHub 的掛鉤服務(wù),這是GitHub管理權(quán)限的方式,我們別無選擇。抱歉!我們將保護(hù)您的賬戶及隱私,確保不會被他人非法獲取。
開始構(gòu)建!登錄到你的 Docker Hub 賬戶,點擊屏幕右上方的 "+ Add Repository" 按鈕,選擇自動化構(gòu)建。
然后按照說明授權(quán)和連接你的 GitHub 賬戶到 Docker Hub。連接成功后,你就可以選擇用來自動化構(gòu)建的倉庫了。
你可以用你的 Dockerfile 從你的公共或者私有倉庫創(chuàng)建一個自動化構(gòu)建項目。
如果你的 GitHub 倉庫包含了私有子模塊的連接,你需要在 Docker Hub 上添加部署秘鑰。
部署秘鑰位于自動化構(gòu)建主頁的 “Build Details” 菜單。訪問設(shè)置 GitHub 倉庫的頁面,選擇 “Deploy keys” 來添加秘鑰。
| Step | Screenshot | Description |
|---|---|---|
| 1. | ![]() |
你的自動化構(gòu)建部署秘鑰位于 “Build Details” 菜單的 “Deploy keys” 下。 |
| 2. | ![]() |
在你的 GitHub 子模塊倉庫設(shè)置頁,添加部署秘鑰。 |
一旦你的組織成員身份設(shè)置為公開,對應(yīng)的 GitHub 組織狀態(tài)便會被公開在你的 GitHub 上。為了驗證,你可以查看 GitHub 上你的組織的成員選項卡。
按照以下步驟配置自動化構(gòu)建的 GitHub 服務(wù)掛鉤:
| Step | Screenshot | Description |
|---|---|---|
| 1. | http://wiki.jikexueyuan.com/project/docker/images/GitHub_settings.png"> | 登錄到 GitHub.com,并轉(zhuǎn)到您的倉庫頁面,點擊右側(cè)頁面“Settings”。 執(zhí)行該操作要求你有該倉庫的管理員權(quán)限。 |
| 2. | ![]() |
點擊頁面左側(cè)的“Webhooks & Services”。 |
| 3. | ![]() |
找到 "Docker" 并點擊它. |
| 4. | ![]() |
確認(rèn) "Active" 被選中,然后點擊 “Update service” 按鈕以保存您的更改。 |
為了設(shè)置自動化構(gòu)建,你需要先把 BitBucket 連接到你的 Docker Hub 賬戶,以允許其訪問你的倉庫。
登錄到你的 Docker Hub 賬戶,點擊屏幕右上方的 "+ Add Repository" 按鈕,選擇自動化構(gòu)建。
選擇的 Bitbucket 服務(wù)。
然后按照說明授權(quán)和連接你的 Bitbucket 賬戶到 Docker Hub。連接成功后,你就可以選擇用來自動化構(gòu)建的倉庫了。
你可以用你的 Dockerfile 從你的公共或者私有倉庫創(chuàng)建一個自動化構(gòu)建項目。
當(dāng)你成功連接賬戶以后,一個 POST 掛鉤將會自動被添加到你的倉庫。請按照以下步驟確認(rèn)或者更改你的掛鉤設(shè)置:
| Step | Screenshot | Description |
|---|---|---|
| 1. | http://wiki.jikexueyuan.com/project/docker/images/bitbucket_hook_menu.png" alt="Settings" width="180"> | 登錄到 Bitbucket.org 進(jìn)入倉庫頁面。點擊左側(cè)導(dǎo)航下的 “Settings”。執(zhí)行該操作要求你有該倉庫的管理員權(quán)限。 |
| 2. | http://wiki.jikexueyuan.com/project/docker/images/bitbucket_hook_menu_2.png" alt="Hooks" width="180"> | 點擊左側(cè) “Settings” 下的 "Hooks"。 |
| 3. | ![]() |
現(xiàn)在你應(yīng)該能看到關(guān)聯(lián)了該倉庫的掛鉤列表,包括一個指向 registry.hub.docker.com/hooks/bitbucket 的 POST 掛鉤。 |
在構(gòu)建過程中,我們將復(fù)制 Dockerfile 的內(nèi)容。我們也將添加它到 Docker Hub 上,使得 Docker 社區(qū)(公共倉庫)或者得到許可的團(tuán)隊成員可以訪問倉庫頁面。
如果你的倉庫有一個 README.md 文件,我們將使用它作為倉庫的描述。構(gòu)建過程中會尋找 Dockerfile 同一目錄下的 README.md。
警告:如果你需要在創(chuàng)建之后修改描述,它會在下一次自動化構(gòu)建完成之后生效。
如果你需要 GitHub 或者 BitBucket 以外的方式來觸發(fā)自動化構(gòu)建,你可以創(chuàng)建一個構(gòu)建觸發(fā)器。當(dāng)你打開構(gòu)建觸發(fā)器,它會提供給你一個 url 來發(fā)送 POST 請求。這將觸發(fā)自動化構(gòu)建過程,類似于 GitHub webhook。
建立觸發(fā)器可在自動化構(gòu)建項目的 Settings 菜單中設(shè)置。
注:你在五分鐘內(nèi)只能觸發(fā)一個構(gòu)建,如果你已經(jīng)進(jìn)行一個構(gòu)建,或你最近提交了構(gòu)建請求,這些請求將被忽略。你可以在設(shè)置頁面來找到最后10條觸發(fā)日志來驗證是否一切正常工作。
也可以使用 Webhooks 來自動化構(gòu)建,Webhooks 會在倉庫推送成功后被調(diào)用。
此webhook調(diào)用將生成一個 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 可在自動化構(gòu)建項目的 Settings 菜單中設(shè)置。
注意:如果你想測試你的 webhook,我們建議使用像 requestb.in 的工具。
倉庫鏈接是一種建立自動化項目與項目之間關(guān)聯(lián)的方式。如果一個項目得到更新,連接系統(tǒng)還會觸發(fā)另一個項目的更新構(gòu)建。這使得你可以輕松地讓所有關(guān)聯(lián)項目保持更新同步。
要添加鏈接的話,訪問你想要添加鏈接的項目的倉庫設(shè)置頁面,在設(shè)置菜單下地右側(cè)點擊 “Repository Links”。然后輸入你想要與之鏈接的倉庫名稱。
警告:您可以添加多個倉庫的鏈接,但要小心。自動化構(gòu)建之間的雙向關(guān)系會造成一個永不停止的構(gòu)建循環(huán)。