GitLab CI/CD課程30

Testing in CI/CD & Configure Security Tests (SAST)

ZONGRU Li
7 min readAug 18, 2022

Testing CI/CD Add SAST job

Static Application Security Testing (SAST)

並放在跑完測試之後的流程執行

並且執行這個Job是透過GitLab提供的強大功能 →Job Templates

Job Templates:

  • 可以穿插在既有的Pipeline流程中
  • GitLab本身提供注入使用!
  • 這也是GitLabAutoDevOps實踐

Testing in CI/CD

Testing in general:

  • 最簡單且基本的就是unit tests
  • 但是現實我們往往測試得更多!
  • 因為我們不會希望改版時造成損壞例如
  • 1.Code not working(程式邏輯問題等)
  • 2.performance
  • 3.Security issues

Deliver application to end users

取捨於兩者之間!

有許多種類的測試:

  • 自動化測試
  • 手動測試
  • 但是一般情況下,我們會希望有足夠多的自動化測試來取代手動測試部分

撰寫許多自動化測試來驗證應用程式的各種方面:

  • Unit Testing:最基本的局部測試應用程式或甚至單一Function
  • Functional Testing:驗證軟體的Functionality
  • Integration Testing:在程式集合運作過程驗證局部的應用程式功能,例如前後端溝通,或是微服務的中介服務
  • 還有其他各式各樣工程師還會有許多種測試
  • UI Testing…
  • API Testing…
  • Regression Testing…

上述這些都可以統稱為 →

Functionality Related Tests

另外還有很重要的一塊是屬於 →

Security Related Tests

Security Related Tests如:

  • Validate application’s security(應用程式安全性驗證
  • vulnerability scanning (弱點分析)
  • penetration testing(滲透測試)
  • 其中還有一個就是SAST(Static Application Security Testing)
  • ...etc

SAST(Static Application Security Testing):

  • 靜態地分析程式碼的弱點
  • 例如SQL injection,Cross-site scripting,buffer overflows,…

另外還有另一種Security相關的測試

DAST(Dynamic application security testing)i.e.黑箱:

  • 分析運作中的應用程式
  • 模擬駭客行為,從外部測試,沒有額外的知識技術需求的測試

接下來就要問 →何時進行測試?

通常在完整的CICD流程中

Functionality Related Tests部分

  • Unit Testing會安排在CICD前半流程中
  • Integration Testing會安排在CICD後半流程

Security Related Tests部分

  • SAST會安排在CICD前半流程中
  • DAST會安排在CICD後半流程

而以上這些工作其實會比較屬於測試工程師QA等角色安排配合進行!

而這邊只是會引用SAST且是由GitLab本身提供的Job

不用去完全理解裡面怎麼進行,但是引用後就能得到測試的結果!

Template for SAST

針對各種任務的Job Templates是基於各種程式語言與技術

其中我們會用到是SAST.gitlab-ci.yml

來進行"Out-of-the-box Functionality" 測試!

GitLab Job Templates

GitLab Job Templates:

  • Templates Job*.gitlab-ci.yml相比於我們自己的pipelineJob
  • 都是通用的,並且可重複使用於我們的各種程式專案上
  • 並且可以透過參數來客製化一些行為

各是GitLab上各式可用的Templates連結(LINK):

往下拉還有各語言的:

其中上面這個連結進去:

找到實際的SAST.gitlab-ci.yml:

而使用上就是將SAST.gitlab-ci.yml合併到我們自己的.gitlab-ci.yml

變成單一個.gitlab-ci.yml來使用!

Include SAST Template

直接在Pipeline的程式內容最後寫上....

然後我們要測試的是nodejs

所以先在SAST.gitlab-ci.yml裡面找到

接下來在我們的Pipeline內的單元測試下面加入:

所以目前Pipeline內容為:

commit後看結果!

進到Pipeline頁面看到

那三個測試就是由Jobs/SAST.gitlab-ci.yml帶進來的!

跑完後可以大致看一下裡面的log:

另一個:

最後一個:

Pipeline跑完後可以看到:

Pipeline Templates

除了上面的Job Template之外

另一個值得注意的是Pipeline Templates!

Pipeline Templates:

  • 提供end-to-end的CICD workflow

額外建立一個空白沒有Pipeline的專案:

進到pipeline設定頁面

可能常用的會是:

這邊隨便點一個Maven的會看到:

然後就可以依據這份來改成理想的Pipeline

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet