天天看點

将代碼從Git自動部署到容器

本文講的是<b>将代碼從Git自動部署到容器</b>【編者的話】将您的代碼從您的Git倉庫轉移到您的容器可能是一件痛苦的工作。本文介紹了如何實作自動化部署。

<a href="http://dockone.io/article/2626">【燒腦式Kubernetes實戰訓練營】本次教育訓練理論結合實踐,主要包括:Kubernetes架構和資源排程原理、Kubernetes DNS與服務發現、基于Kubernetes和Jenkins的持續部署方案 、Kubernetes網絡部署實踐、監控、日志、Kubernetes與雲原生應用、在CentOS中部署Kubernetes叢集、Kubernetes中的容器設計模式、開發Kubernetes原生應用步驟介紹等。</a>

有許多方法可以将您的源代碼從Git 倉庫部署到容器中,包括整個容器的重新部署、通過卷的即時重新部署或“git clone”方法。然而,當涉及到這一過程的自動化和持續部署時,許多開發人員可能會面臨其中的複雜性,因為他們需要知道如何正确地将所有應用程式元件與所需的互連點結合起來。

尤其是在容器裡,必須管理所建構的堆棧映像來處理CI/CD管道引起的額外複雜性。如果在作業系統、應用伺服器堆棧或其依賴項中進行頻繁的送出,那麼整個容器重新部署可能不是最好的方法。

<a href="http://dockerone.com/uploads/article/20170829/965436fb4511a2e83b858a181033d5de.png" target="_blank"></a>

為了簡化部署自動化,Jelastic準備了一種特殊專用的Git-Push-Deploy包,用于将代碼傳遞到初步建構的容器映像中。這個包實作了許多配置,以便在您的Git應用程式源存儲庫中自動部署送出的更改,使其能夠在最小延遲的情況下進行進一步的測試。

Git-Push-Deploy包可以與GitHub和GitLab存儲庫內建。它是為在Java、PHP、Ruby和Node.js和Python應用源代碼中自動提供更新而開發的。可以應用于以下認證的模闆:

Java – Tomcat 6/7/8/9, TomEE, GlassFish 3/4, Jetty 6/8/9, WildFly 8/9/10, JBoss AS 7, Spring Boot 1.x

PHP – Apache 2.4, NGINX 1.10

Ruby – Apache 2.4, NGINX 1.10

Node.js – Node.js 0.x-6.x

Python – Apache 2.4

工作流依賴于項目中使用的程式設計語言:

對于基于Java的項目,該包将建立一個單獨的環境,其中包含Maven建構節點,它将負責與遠端Git存儲庫的互動,進而觸發您的應用程式建構及其部署到應用程式伺服器。

對于PHP / Ruby /Node.js/python應用中,該包為項目的部署直接在Web伺服器的ROOT context上設定了一個管道(這裡,認為 Ruby應用程式伺服器提供的是一種部署模式,而不是dashboard的context,盡管實際項目位置是相同的)。

這個部署自動化包與4.9.5版本的Jelastic PaaS以及更高版本相容。要檢視和比較可用的管理平台和特定的Jelastic版本,請參考Jelastic Cloud Union目錄。

對于特定的附加安裝,您需要為您的Git帳戶提供一個個人的API Token。這可以使包為對應的存儲源設定一個webhook,在每次更改代碼并使其生效時,來初始化重新部署應用。

我們來生成一個。根據你所使用的Git VCS,GitHub或者GitLab對應以下訓示進行操作。

<a href="http://dockerone.com/uploads/article/20170829/e98912621be21144a62ea4564dd4ad72.png" target="_blank"></a>

在打開的頁面中,標明Token description,并選擇repo和admin:repohook,在頁面底部單擊Generate token。

<a href="http://dockerone.com/uploads/article/20170829/e8b26fe607d7e62e48599768232ca972.png" target="_blank"></a>

将生成的access token複制儲存起來(因為離開這個頁面之後,就不能再被檢視)。

<a href="http://dockerone.com/uploads/article/20170829/9fbd58de7cb5837f5ae9d8522601f916.png" target="_blank"></a>

完成這一步之後,開始繼續安裝Git-Push-Deploy包。

在這裡,指定可選的token名稱,它的到期日期(可以留白),并勾選api權限範圍。

<a href="http://dockerone.com/uploads/article/20170829/4020c2a4aa2c6d55756039cf43556b0d.png" target="_blank"></a>

點選 Create Personal Access Token按鈕。

在打開的頁面中,複制并臨時将您的通路令牌值存儲在其他地方(因為離開本頁後您将無法再次看到它)。

<a href="http://dockerone.com/uploads/article/20170829/938ffc1783a7c46618bbff509909c872.png" target="_blank"></a>

現在,您已經準備好繼續安裝Git-Push-Deploy包了。

如果運作一個基于Java的項目,您需要通過在其結構中添加一個特殊的項目對象模型(POM)檔案來開始與Maven建構節點進行适當的互動。

是以,建立一個pom.xml檔案在項目源的根目錄中,然後必須添加下面的内容:

可選值:

groupId -項目組(例如公司名稱)。

artifactId-項目的名稱。

version -應用版本。

Git-Push-Deploy包是一個附加元件,是以它隻能安裝在一個環境的頂部。我們已經準備了兩個獨立的環境,分别使用Tomcat和apache-php應用程式伺服器來展示不同程式設計語言的工作流。

如果你打算使用以前建立的環境,請注意這個包将覆寫部署到根目錄的應用程式。是以,為了保持已經部署的應用程式,将其移動到使用者目錄。我們建議建立一個新的環境,然後進行接下來的安裝:

<a href="http://dockerone.com/uploads/article/20170829/a4f0e63393c03f4e43b40763c00926cd.png" target="_blank"></a>

單擊Import 繼續。

2、在打開的架構中,指定關于源和目标環境的詳細資訊:

Branch – 項目分支。

User – 輸入您的Git登入帳戶。

Token –指定您之前為webhook生成建立的 access token。

Environment name – 選擇要部署應用程式的環境。

Nodes – 應用程式伺服器名(在選擇環境時自動擷取)。

<a href="http://dockerone.com/uploads/article/20170829/b0af9426433bb529c32f1455f2be215b.png" target="_blank"></a>

單擊“Install ”繼續。

3、等一分鐘讓Jelastic從GitHub擷取應用程式資源,配置webhook以進行接下來的部署。

<a href="http://dockerone.com/uploads/article/20170829/0b991e3f9e37c3bd03b8053fd84e245a.png" target="_blank"></a>

安裝完成後點選“Close“關閉通知框。

4、根據項目類型的不同,會有如下結果:

對于基于Java的基礎設施,您将在dashboard中看到一個新的環境,其中包含Maven建構節點;它将在每次更新源代碼時,在Web伺服器上建構和部署應用程式到Root context下。

<a href="http://dockerone.com/uploads/article/20170829/713c027a522c6d2343db739c32dc9479.png" target="_blank"></a>

請注意,Maven可能需要花費一些時間來編譯一個項目(盡管包安裝本身已經完成了),是以您需要等待幾分鐘才能啟動它。這個操作的目前進展可以通過Maven的vcs_update 日志檔案實時跟蹤。

<a href="http://dockerone.com/uploads/article/20170829/7d829b4269b3a7b64e0094afaf44db38.png" target="_blank"></a>

對于基于PHP的基礎設施(以及其他受支援的語言),您的應用程式将直接部署到所選的伺服器Root context上。

請注意,Ruby應用程式伺服器的類似項目部分提供了關于使用的部署模式(預設情況下開發)的資訊,而不是context,同時實際的應用程式位置也引用了伺服器root。

要啟動應用程式,請單擊web伺服器旁邊的Open in browser。

<a href="http://dockerone.com/uploads/article/20170829/2c6bc604cfe009e2b79e2a1ce7276139.png" target="_blank"></a>

就是這樣!現在,您的應用程式的新版本在每次送出到源端時都會自動地發送到應用程式伺服器。

下面的表列出了在接收到更新後的代碼後不同應用伺服器的反應。

<a href="http://dockerone.com/uploads/article/20170829/62724059369d0dd44151dbdf02596eb3.png" target="_blank"></a>

為了消除可能的應用程式停機時間,可以使用重新啟動更新政策,将其擴充到多個容器中。在這種情況下,所需的更新将按順序應用到執行個體中,預設情況下延遲30秒。

現在讓我們來看看這個過程是如何工作的。對源端的代碼做一些細微的調整,確定一切都是自動化的:

單擊您的項目源中的某個項目的Edit this file,并Commit changes——例如,我們将修改HelloWorld啟動頁面上的文本。

<a href="http://dockerone.com/uploads/article/20170829/c5d0cb03b52d623e2837c83e1da3a0d8.png" target="_blank"></a>

是以,将觸發适當的webhook來将所做的更改部署到您的主機環境中——請參考存儲庫Settings &gt; Webhooks部分以了解詳細資訊。

<a href="http://dockerone.com/uploads/article/20170829/e3a8ffc1e7a38542e6287953d58710c9.png" target="_blank"></a>

單擊此字元串後,您将看到由webhook發起的最近傳遞的清單,以及它們執行的結果。

最後一個檢查,傳回到您的應用程式頁面并重新整理(同時記住,Maven可能需要額外的一分鐘來建構和部署您的基于Java的項目)。

<a href="http://dockerone.com/uploads/article/20170829/0195c49471ed402bf285d03dcce0333b.png" target="_blank"></a>

就是這樣!正如您所看到的,這些修改成功地應用了,是以這個方案按照我們預期的方式工作。

隻需更新代碼,按照通常的方法進行送出,所有的更改都會自動地推送到您的Jelastic環境中。不需要在程序之間切換,也不需要手動更新,進而消除人為錯誤,并加速應用程式的上線時間。

<b>原文釋出時間為:</b>2017-08-30

<b>本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。</b>

<b></b>

<b>原文标題:</b><b>将代碼從Git自動部署到容器</b>