2017-04-01 60 views
1

我已經設置了一個包含3個分支(master,dev和docker)的github存儲庫。我已經成功設置並鏈接dockerhub上的自動構建。每次在Github上進行推送時,都會在Dockerhub上以不同標記(最新的主設備,開發者的Beta版和碼頭工的Alpha版)構建映像。這工作正常。現在的問題...在Github-Dockerhub上自動構建的Docker工作流程

在Dockerfile上,有一個git clone命令來檢索項目。問題是這總是指向主人。因此,如果我將某些東西推送到碼頭分支(例如使用alpha標籤構建圖像),那麼該圖像上的項目代碼是主碼而不是分支碼頭代碼,這是此案例所需的分支碼頭代碼。

如果我修改分支docker(它生成alpha標記的圖像)的Dockerfile,我把git clone -b docker ...構建好,但在所有測試後,當我想合併一個從docker分支到dev分支的pull請求時例如,dev上需要另一個更新,以便將Dockerfile內部的git clone命令更改爲指向正確的分支。同樣的情況下,從dev到master的pull request對於這個項目來說更加困難,master分支是受保護的,我不能直接push到master ...所以在從dev到master的pull請求之後,我無法修復Dockerfile更改Dockerfile以將git clone更改爲再次指向主設備。

有沒有辦法在自動化建設中擁有不同標籤的分支,而不需要在從一個分支到另一個分支的請求之後進行任何更改?謝謝。

回答

2

使用自動構建時,會發生什麼情況;

  • 泊塢集線器(或碼頭雲,其中有一些更先進的功能)檢查出來的git的承諾觸發構建
  • 它建立您在自動生成配置搭建起Dockerfile

從上面;你應該而不是git clone你的Dockerfile 在所有的,因爲你會做什麼已經完成了自動構建。簡單地做;

FROM some-base-image 

# Copy your project's source into the image 
COPY . /my-src 
RUN do-something-with-the-source 

泊塢雲擁有先進的功能,它允許您在自動生成的不同階段運行自定義腳本,使用build phase hooks (documentation)。這允許您(例如)通過在「構建圖像」中構建項目,然後將生成的代碼複製到本地目錄並從中構建最終圖像來製作「最小」圖像。

編輯

上泊塢雲自動構建選項比自動更多的功能上泊塢樞紐建設。例如,要構建的Dockerfile和構建上下文可以單獨設置。這允許你在一個子目錄中有一個Dockerfile,但是使用該子目錄之外的文件作爲構建上下文。要做到這一點,設置Dockerfile位置(例如)/docker/Dockerfile和buildcontext到/

enter image description here

+0

它並沒有奏效。我從Dockerfile中移除了'git clone'並嘗試了'COPY。/some/existing/path/inside/the/container',並且在推後,自動構建在命令之後失敗,因爲文件不在那裏。我的意思是,COPY命令不會將我的項目複製到容器中。我也嘗試過'COPY ../ some/existing/path/inside/the/container',因爲我的Dockerfile位於項目的/ docker目錄中......但它也不起作用。任何其他想法? – OscarAkaElvis

+0

我的項目在/ docker目錄中有dockerfile文件......並使用COPY。/some/existing/path/inside/the/container'僅拷貝僅具有Dockerfile和README.md的/ docker文件夾的內容。我需要複製父目錄及其所有目錄(不關心/ docker是否被複制)。如何實現這一目標?正如我在其他評論中所說的。使用'COPY ../ some/existing/path/inside/the/container'生成這個錯誤'Build failed:構建上下文之外的禁止路徑:..()' – OscarAkaElvis

+0

@OscarAkaElvis我添加了一些額外的信息和屏幕截圖 – thaJeztah