iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0
DevOps

不想吃土嗎?就利用開源軟體打造CICD Pipeline吧!系列 第 30

Day 30: 自動化部署成功了,然後呢?

  • 分享至 

  • xImage
  •  

到了鐵人賽的最後一天。一般來說,最後的一篇文章,通常都會總結一下這三十天的內容。簡單來說通常可看可不看。但這最後一天,如果就這樣子結束,好像平淡了一點。所以今天,除了總結以外,我再來給大家介紹三款好用,但未能納入是次系列的工具吧!

自動化IaC測試工具 – Terratest

是次系列,我們曾經介紹了SonarQube及Dependency Track兩套工具。兩套工具都主要用於檢測程序開發上的安全性問題。但不知到大家又有没有想過,既然程序開發有工具可以幫助我們測試程試碼,那麼同為使用程式碼開發的基礎架構即程式碼部份,又有没有工具可以幫到我們呢?

答案是有的,其中一個工具就是我們現在介紹的工具 – Terratest
https://ithelp.ithome.com.tw/upload/images/20221007/20152012x39jqWZuaK.png

Terratest是一個自動化的基礎架構即程式碼測試工具。雖然名稱上跟Terraform很類似,但是這個工具並不只限於測試Terraform。Terratest除了支援Terraform以外,亦支持測試Docker、Kubernetes、又或是GCP等不同的基礎架構。

Terratest使用Go語言進行編寫。進行部署,我們可以先利用Terratest編寫好基礎架構的測試內容。然後利用Terratest去部署一個實際環境去進行自動化測試。測試的內容可以是進行一些HTTP的要求、或是一些API Call、或是一些SSH連接等。最後,Terratest會把相關測試的部份撤回部署。

這個做法的好處,是由於整個測試基本上在一個跟生產環境類同的地方進行測試,因此可以保證測試的可靠性。

政策即程式碼工具 – Checkov

除了自動化測試工具,我們亦可以利用另一套工具去對我們基礎架構即程式碼的程式碼進行檢測。而這套工具就是Checkov
https://ithelp.ithome.com.tw/upload/images/20221007/20152012p4a1VNQHW0.png

Checkov是一套政策即程式碼工具的工具。簡單來說,就是一些在部署期間,我們在編寫基礎架構即程式碼的程式碼時,有一些安全性的政策我們必須要留意。而Checkov就是用來幫我們檢查這些部份是否有正確地進行了配置。

比如說,當我們想部署一些VM時,我們必須要有SSH Key配對到VM上。這個時候,我們就可以利用Checkov去檢查我們編寫的Terraform程式碼中,是否有為所有的VM,都配置了SSH Key。

除此以外,Checkov亦提供了一些基本的安全性政策。因此利用了Checkov這個工具以後,大家就可以最大程度保障到基礎架構程式碼的安全性。

合約測試工具 – PACT

最後一個我近來比較常用,但是又未能在本系列中詳細介紹的工具 – PACT
https://ithelp.ithome.com.tw/upload/images/20221007/2015201221zo15Piqo.png

以往一些大型的項目中,大多會用Micro-service的設計去進行開發。但是當進行Micro-service的開發時,不同服務之間可能會利用不同的API,或是使用Message Queue去進行溝通。

這時候,如何保證程式之間的溝通暢通就是一個很重要的課題。有時候當其中一個服務升級了功能升級了,其他的服務可能亦因為API的更改而需要更新程式碼。而如何確保所有服務之間的API連接没有錯誤呢?我們就可以利用PACT這個工具去幫忙。

PACT是一個合約測試工具,它的原理是為每個服務與服務之間的連接創建一張合約。當其中一方的服務進行了更新時,必須同時更新相關的合約。只要服務的雙方都遵守了合約規範的內容,那麽我們就可以保證服務間的溝通的正確性。

而PACT亦可以配合Pact Broker這套工具去管理創建的合約。當CICD運作時,可以把程式中產生的合約上傳到Pact Broker中進行管理,並檢查不同服務間的連接情況。

使用了PACT之後,就可以最大化減少不同服務間,因為版本相容性問題引起的錯誤。

小結

以上幾款工具都可以跟Jenkins配合,去保障我們的服務穩定地運作。有需要的朋友可以自行嘗試相關的開發哦!

系列總結

是次鐵人賽中,我們成功建立了一條由版本管理到自動化部署的管道。本來的計劃是打算把以上三款工具都加入到本系列中,但後來發覺時間上好像不太許可。然而本次鐵人賽雖然有很多未盡完善的部份,而且有很多深入的內容未及探討,但這次鐵人賽中,我已經竭盡全力,把這段日子的體驗都寫在這長短不一的三十篇文章中。希望以這個系列,為大家提供一點思路,能夠讓大家的按照不同的需要,建置一條方便大家使用的CICD Pipeline。

最後,再一次總結一下我們這三十天使用過的工具吧!

版本管理

  • Git

持續整合

  • Jenkins

持續測試

  • SonarQube
  • Dependency Track
  • Terratest
  • Checkov
  • PACT

成品倉庫

  • Nexus
  • Harbor

持續交付

  • Terraform
  • Ansible

雲端平台

  • GCP

希望大家都喜歡這個系列,並能夠從中有所得益。

題外話

到了這裡,我的鐵人賽終於完滿結束了!感謝大家一路的支持和陪伴。

回想最初看到2022鐵人賽的消息時,已經剩下十天左右的時間就截止報名。當時有很多掙扎,到底應不應該按下報名。但有時候,人生總是需要一點點衝動。就是這一股衝動,讓我過去這一個月以來,過了一個很充實的旅程。

這一個月以來,所有工具的安裝,設定,截圖,網絡上的各種爬文,每天發文,都是由我自己一手一腳包辦。途中亦有很多意想不到的意外,例如各種Docker與M1的相性不合問題等。中間有數天真的擔心自己未必能夠成功完賽。但是最終,我還是成功站在這個終點。

過程雖然忙碌,但是得著亦甚多。

在這裡要感謝一路以來支持我的朋友及同事,為我提供了不少的意見。亦感激公司讓我在工作閒暇期間抽空寫作。

下一年,時間許可的話,或許,可能,大概…我會再一次參賽吧?如果下年能夠再次出現在此,希望大家能夠繼續多多支持哦!

有緣再會!


上一篇
Day 29: Ansible鐵人賽特別篇!Ansible Vault與Jenkins聯乘自動化!
系列文
不想吃土嗎?就利用開源軟體打造CICD Pipeline吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言