--- title: Azure DevOps Pipelines # 簡報的名稱 tags: Azure DevOps # 簡報的標籤 --- # Azure DevOps Pipelines ## 這篇使用 Azure Pipelines 來跑CI流程,CI流程包含以下步驟 ### 1. Build Code ### 2. Run Unit Test ### 3. Static Analysis ### 4. Build Image ### 5. Push Image ### 6. Create release ## 準備一個[Node JS專案](https://github.com/ste5022424/NodeJsHello) ### 1. 將[Node JS專案](https://github.com/ste5022424/NodeJsHello) 推送至 Azure Repos ![](https://i.imgur.com/MnTVWx2.png) ![](https://i.imgur.com/uMD8QLm.png) ![](https://i.imgur.com/8ZP9fBc.png) ### 2. 使用 vscode 推送至 Azure Repos ![](https://i.imgur.com/knjFM75.png) ![](https://i.imgur.com/TsK1ciT.png) ### 3. 輸入遠端存放庫名稱 ![](https://i.imgur.com/i8mZQDj.png) ### 4. 輸入遠端網址 ![](https://i.imgur.com/BnASo7i.png) ### 5. 推送 ![](https://i.imgur.com/CRIR1Jx.png) ![](https://i.imgur.com/hKqVMby.png) ## 1. Build Code ### 1.1 New build Pipelines ![](https://i.imgur.com/mPF6N4u.png) ### 1.2 Azure Repos Git ![](https://i.imgur.com/qEL9ZIJ.png) ### 1.3 選剛剛推送的專案 ![](https://i.imgur.com/KFUkG7A.png) ### 1.4 選Node.js ![](https://i.imgur.com/Uv0zjz2.png) ### 1.7 載入預設範本 > 範本會啟動一個 ubuntu 的容器做CI ![](https://i.imgur.com/LGlLAzP.png) ### 1.7 編輯步驟,點選右邊 Show assistant ![](https://i.imgur.com/4Qvo28r.png) ![](https://i.imgur.com/aLKCH88.png) ### 1.8 npm install ![](https://i.imgur.com/9uI7NON.png) ## 2. Run Unit Test ### 2.1 npm test ![](https://i.imgur.com/9gpd0aP.png) ### 2.2 Publish Test Results > 這邊使用 jest 套件 來跑 test ![](https://i.imgur.com/wmIYPJt.png) > 這邊使用 junit套件 來產生 Results ![](https://i.imgur.com/YYvtzvt.png) ### 2.3 Publish Code Coverage Results ![](https://i.imgur.com/TO2Zqfe.png) ![](https://i.imgur.com/vdRHn9x.png) ```yaml= - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: 'Cobertura' summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml' ``` ### 先跑一次 Unit Test 的 CI ![](https://i.imgur.com/wK11BBL.png) ![](https://i.imgur.com/6dTv1Om.png) > Tests Report ![](https://i.imgur.com/SvpJ9CO.png) > Code Coverage Report ![](https://i.imgur.com/5resStT.png) > 以上圖表就可以看到程式碼覆蓋率,及單元測試的成功跟失敗的結果 ## 3. Static Analysis > 此步驟會執行靜態程式碼掃描,並且將報告上傳至 [sonarcloud](https://sonarcloud.io/) ### 3.1 申請 [sonarcloud](https://sonarcloud.io/about) token ![](https://i.imgur.com/Ek6G3kO.png) ![](https://i.imgur.com/HNlW4hG.png) #### 1. 選 MyAccount ![](https://i.imgur.com/a0QH4w2.png) ![](https://i.imgur.com/cgvaD6g.png) #### 2.產生一組token 先複製起來等等會用到 ![](https://i.imgur.com/rTFoSlM.png) ### 3.2 設定外部擴充 #### 1. 到組織 > Organization Settings > Extensions ![](https://i.imgur.com/heOvgbB.png) #### 2. Browse marketplace ![](https://i.imgur.com/0AhSz4Z.png) #### 3. 搜尋 [sonarcloud](https://marketplace.visualstudio.com/search?term=sonarcloud&target=AzureDevOps&category=All%20categories&sortBy=Relevance) ![](https://i.imgur.com/RAxah7w.png) ![](https://i.imgur.com/ubnr1KQ.png) #### 4. 安裝 sonarcloud ![](https://i.imgur.com/nXJU0nY.png) ![](https://i.imgur.com/5dTDH3b.png) ### 3.3 連接外部資源到 sonarcloud #### 到 Project> Project settings > Servcie connections > Create service connections ![](https://i.imgur.com/fBYyksL.png) #### 1. 搜尋 sonarcloud ![](https://i.imgur.com/Y13WWoA.png) #### 2. 輸入 剛剛複製的 token ![](https://i.imgur.com/zF8UNuF.png) #### 3. 驗證 token ![](https://i.imgur.com/oMC4QVF.png) #### 4. 新增成功 ![](https://i.imgur.com/a0nVKOr.png) ### 3.5 回到 Pipelines > Builds > Edit ![](https://i.imgur.com/9iIbRTv.png) #### 1. 搜尋 sonarcloud ![](https://i.imgur.com/esWMoVt.png) #### 2. Prepare Analysis Configuration ![](https://i.imgur.com/zi62fcc.png) #### 3. Run code Analysis ![](https://i.imgur.com/GIFhDwc.png) #### 4. Publish Quality Gate Result ![](https://i.imgur.com/r684VuG.png) #### 5. Run Pipelines ![](https://i.imgur.com/b5iCaKY.png) #### 6. 回到 sonarcloud 就可以看到程式碼已經送到 sonarcloud ![](https://i.imgur.com/pUdV4MB.png) ## 4. Build Image ### 1.建立 [Azure Container Registry](https://portal.azure.com/) ### 2. 搜尋 Container Registry ![](https://i.imgur.com/tzrjFjl.png) ### 3. 建立容器登入 ![](https://i.imgur.com/EuLl7yd.png) ### 4. 這邊可以看到剛才建立的容器登錄 ![](https://i.imgur.com/DTAMc4q.png) ### 5. 回到 azure devops > Porject settings ![](https://i.imgur.com/P6NAL4w.png) ### 6. Service connections ![](https://i.imgur.com/VbY481W.png) ### 7. New service connection ![](https://i.imgur.com/DxlvNjf.png) ### 8. 選 Azure Container Registry ![](https://i.imgur.com/3noNLYD.png) ### 9. 回到 Pipelines 加入 build docker ![](https://i.imgur.com/YKuVjNV.png) ![](https://i.imgur.com/grUPXBS.png) ### 10. Run Pipelines ![](https://i.imgur.com/6EKOV84.png) ### 11. 推送成功 ![](https://i.imgur.com/FktFSJj.png) # 參考 * [azure.microsoft.com](https://azure.microsoft.com/zh-tw/services/devops/) * [Set up your client's npmrc](https://docs.microsoft.com/zh-tw/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows) * [Build, test, and deploy JavaScript and Node.js apps](https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/javascript?view=azure-devops)