簡單解釋工程師開發如何達成自動化的測試、整合及佈署到正式的客戶環境

Continuous Deployment via GitLab, Jenkins, Docker and Slack
簡單解釋工程師開發如何達成自動化的測試、整合及佈署到正式的客戶環境

在開始之前先簡單介紹一些工具:1

Git

程式碼版本控制系統

123[email protected]:~/docker/fju_ehs/httpd$ git branch* bendevmaster

簡單解釋:主要支幹是 master,如果有多個程式設計師一同開發或是要修復 bug 時,可以暫時先開另一個分支,最後在合併回主支,並且可以隨時切換到不同版本的程式碼,最重要的是可以推送到遠端進行備份,而其它程式設計師透過 git 取得程式時也會一併取得相關的版本。

GitHub

https://zh.wikipedia.org/wiki/GitHub

GitHub是一個透過Git進行版本控制的軟體原始碼代管服務,由GitHub公司的開發者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails編寫而成。 GitHub同時提供付費帳戶和免費帳戶。

https://github.com/

GitLab

https://zh.wikipedia.org/wiki/Gitlab

GitLab是一個利用Ruby on Rails開發的開源應用程式,實現一個自代管的Git專案倉庫,可通過Web介面進行存取公開的或者私人專案。
它擁有與GitHub類似的功能,能夠瀏覽原始碼,管理缺陷和注釋。可以管理團隊對倉庫的存取,它非常易於瀏覽提交過的版本並提供一個檔案歷史庫。團隊成員可以利用內建的簡單聊天程式(Wall)進行交流。它還提供一個代碼片段收集功能可以輕鬆實現代碼復用,便於日後有需要的時候進行尋找。

Virtual Box

虛擬機軟體,你可能要先了解全虛擬化與半虛擬化技術

快速理解:半虛擬化需要透過客戶端的作業系統模擬,Virtual Box 為半虛擬化

https://www.virtualbox.org/
20170910-02

圖片來源:https://www.google.com.tw/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwjp86ym9prWAhXJi7wKHe6ABUMQjRwIBw&url=https%3A%2F%2Fwww.virtualbox.org%2Fmanual%2Fch01.html&psig=AFQjCNGkl112MXsS9Qcwv–TCnbC_JiFKQ&ust=1505143413034495

Vagrant

https://www.vagrantup.com/

文字化(終端機)版本的 Virtual Box 腳本控制程式

20170910-03

圖片來源:https://css-tricks.com/wp-content/uploads/2015/05/command-line.png

Docker

虛擬機容器技術

可以參考這裡:http://www.ithome.com.tw/news/91847

Docker Hub

公開的 Docker Image 庫

https://hub.docker.com/

Docker Registry

自建私有的 Docker Image 庫

Slack

工程師版本的 Line,可串接程式、建立程式自動通知訊息的流程,發生錯誤第一時間知道

https://slack.com/

Jenkins

https://jenkins.io/

Jenkins是一個用Java編寫的開源持續整合工具。在與Oracle發生爭執後,專案從Hudson專案復刻

Jenkins提供了軟體開發的持續整合服務。它執行在Servlet容器中(例如Apache Tomcat)。它支援軟體配置管理(SCM)工具(包括AccuRev SCMCVSSubversionGitPerforceClearcaseRTC),可以執行基於Apache AntApache Maven的專案,以及任意的Shell指令碼和Windows批次處理命令。Jenkins的主要開發者是川口耕介。[2]Jenkins是在MIT許可證下發布的自由軟體[3]

可以通過各種手段觸發構建。例如提交給版本控制系統時被觸發,也可以通過類似Cron的機制排程,也可以在其他的構建已經完成時,還可以通過一個特定的URL進行請求。

https://zh.wikipedia.org/wiki/Jenkins_(%E8%BD%AF%E4%BB%B6)
20170910-01

圖片來源:https://medium.com/@ahmetatalay/continous-deployment-via-gitlab-jenkins-docker-and-slack-5d08836d01e0

使用上面所介紹的工具達成CI/CD自動化發佈或部署 (Continuous Delivery / Continuous Deployment)

基本上透過上述的工具,可以達成 CI/CD 自動化發佈或部署,減少人工重複建立環境及測試的工作。

什麼是CI/CD自動化發佈或部署 (Continuous Delivery / Continuous Deployment)

自動化發佈或部署,就是要讓所有工程師只要上傳程式碼後,CI/CD Server會自動幫程式碼做測試、建立虛擬機環境,並回傳成功或失敗的訊息給所有相關的專案人員。

除了可以大大的減少以往人工的重複作業外,也可以讓每個參與專案的人可以在第一時間取得相同的訊息。

為什麼要使用CI/CD自動化發佈或部署 (Continuous Delivery / Continuous Deployment)

程式設計師每 push 一次程式碼,CI/CD Server會自動建置一台主機,並測試程式設計師的程式碼,透過不斷的出現小錯誤,讓程式設計師可以第一時間處理,來避免傳統專案直到最後發佈程式碼時才出現一堆主機系統環境錯誤,甚至要花好幾天才能解決。

而且透過 CI/CD Server 所自動建置的網站,到了一定的開發階段後,可以傳給客戶操作,除了可以讓客戶知道整個專案進度外,也可以讓客戶在第一時間反應心得,同樣可避免傳統上要等到6個月其至1年才讓客戶看到結果,但卻發現客戶要的不是這個。

對專案經理人來講,了解這些有什麼用處?

專案經理人了解上述技術、工具後 (當然前提是公司的技術主管導入了Scrum敏捷開發方式 ),透過上述工具,可以讓公司內部的專案經理及其它人第一時間知道專案進度,讓專案經理及管理階層的人在調派工作時,不會只憑感覺調派工作,而且可以避免長時間的與專案脫離。而每個參考專案開發的程式人員,也可以清楚知道目前專案的進度,對於時程的預估比較不會出現重大的誤判。

link: http://ps.hsuweni.idv.tw/