Continue Integration and Continue Delivery

(只提供繁体中文版本)

CICD – Blog by John Chang

Continue Integration and Continue Delivery

這禮拜建立了一套CI/CD的demo lab,用的是AWS的CodePipeline。Source的部分我用的是自己的GitHub,build跟deploy都是使用AWS的CodeBuild和CodeDeploy。EC2的部分,我建立了一台ubuntu instance,上面只跑了Tomcat webcontainer,目的是為了顯示整個pipeline完成後的結果。

在GitHub我上傳了一個Maven專案,內容是一個很基本的Java springframework 架構。如果要將這個web應用程式放到Tomcat上,原本的方式應該是使用Maven指令,將原始碼打包成war檔案,但我想要讓CodeBuild幫我自動完成這工作。為了達到這個目標,必須在根目錄下新增一個buildspec.yml檔案,在這個YAML檔案裡面定義了幾個階段(phases),包含pre-build, build, post-build等等,可以把Maven指令定義在這些階段裡面,讓CodeBuild幫你執行,它的背後其實是用docker container去進行的,這個container裡面其實已經裝好maven,所以我們不需要再重新安裝。在buildspec.yml還有一個部分是artifacts,定義了你的產出有哪些,我指定的是一個war檔,以及一個appspec.yml跟一些shell scripts,這些內容是可以接著讓CodeDeploy去使用的。

Appspec.yml也是放在根目錄下,這是讓CodeDeploy知道要如何去部屬你的應用程式,appspec.yml的file區塊,說明要將哪些東西複製到目標機器的哪個目錄,在這邊我指定的是剛剛產出的war,而hooks區塊說明了安裝的步驟等等,包括BeoforeInstall, Install, AfterInstall, ApplicationStart等等,可以將想要執行的script定義在這區塊裡面,例如我在BeforeInstall的script是將tomcat先暫停並移除舊的目錄,接著就會把file區塊的檔案複製到目標路徑(/var/lib/tomcat/webapps)下面,AfterInstall就可以start tomcat。

CodePipeline完成後的結果從瀏覽器就可以直接看到,所以往後只要我們有修改原始碼,上傳到GitHub後,pipeline就會自動幫你做建構並部署的動作,這整個自動化的流程,讓developers只需要建立一次,就能專心在開發城市上面。

Posted in ICG日志.