由於Docker Hub上的build time restrictions,我決定將耗時的自動構建的Dockerfile
拆分爲3個文件。 這些「子版本」中的每一個都在Docker Hub的時間限制內完成。在同一個Docker Hub存儲庫中鏈式自動構建
我現在同一個版本庫中的以下設置:
| branch | dockerfile | tag |
| ------ | ------------------ | ------ |
| master | /step-1.Dockerfile | step-1 |
| master | /step-2.Dockerfile | step-2 |
| master | /step-3.Dockerfile | step-3 |
的圖像按以下順序互爲基礎:
step-1.Dockerfile
:FROM ubuntu
step-2.Dockerfile
:FROM me/complex-image:step-1
step-3.Dockerfile
:FROM me/complex-image:step-2
一個單獨的web應用程序使用Docker Hub提供的「構建觸發器」URL觸發構建step-1
。 (其中添加了{"docker_tag": "step-1"}'
負載)但是,Docker Hub不提供自動觸發step-2
,然後step-3
後綴的方法。
問:如何自動按照各自的順序觸發以下構建步驟?(即觸發step-2
後step-1
完成之後,觸發step-3
後step-2
結束)
注:我不想爲每個step-i
然後使用泊塢集線器的連接它們設置不同的版本庫「庫鏈接。」我只是想鏈接標籤在同一回購協議。
注意:到現在爲止,我的解決方案是將Docker Hub Webhook連接到我製作的Web應用程序。當step-n
完成時(即使用包含標記名稱step-n
的JSON調用我的Web應用程序的URL),Web應用程序使用「構建觸發器」觸發step-n+1
。它按預期工作,但是,我想知道是否有一種「更好」的做事方式。
編輯:As requested by Ken Cochrane這裏是initial Dockerfile
以及它所使用的"build script"。我只是試圖dockerize Cling。 (一個C++解釋器)它需要編譯llvm,clang和cling。正如你所期望的,根據不同的機器上,它需要幾個小時的話,和泊塢樞紐允許「只」 2小時建立在最:)我在develop
分支後來添加的(仍然是「子建」圖像)分別構建整個事物的一部分。我不確定這裏是否有進一步的優化。
此外,爲了測試各種想法(和避免等待H-小時的結果)我有安裝another repo具有類似的結構。(唯一的區別是,它的Dockerfile
■不要做盡可能多的工作)
更新1:上Option 5:如預期,從step-1.Dockerfile
的curl
已被忽略:
Settings > Build Triggers > Last 10 Trigger Logs
| Date/Time | IP Address | Status | Status Description | Request Body | Build Request |
| ------------------------- | --------------- | ------- | ------------------------ | -------------------------- | ------------- |
| April 30th, 2016, 1:18 am | <my.ip.v4.addr> | ignored | Ignored, build throttle. | {u'docker_tag': u'step-2'} | null |
另一個問題這種方法是,它要求我把構建觸發的(祕密)令牌在Dockerfile
給大家看看:)(希望,多克爾中心有一個選項,以使它無效並重新生成另一個)
更新2:這裏是my current attempt: 它基本上是一個Heroku -hosted的應用程序,具有APScheduler週期性「觸發」啓動該初始構建步驟和Flask網絡掛接處理程序「傳播」構建。 (即它有構建標籤的有序列表,每次被webhook調用時,它會觸發下一個構建步驟),我將在業餘時間繼續完成這個工作。 (歡迎提出建議:))
忘記了觸發標記。您應該能夠從構建觸發器頁面重新生成一個新的。 –
我認爲你的用例是唯一的,所以你的自定義web應用程序來處理它,是最好的選擇。隨時接上github並鏈接到它,以便其他人可以查看並提供反饋。不要擔心成爲初學者,我們都開始在某個地方:) –