跳到主要內容

發表文章

目前顯示的是 6月, 2020的文章

[DevOps] 持續集成、持續交付、持續部屬(CI/CD)的開發流程實作

DevOps可以稱為一種工作文化,主要在實現一種將專案從開發、到測試、再到發佈產品的整個流程自動化、透明化的概念。讓開發人員和品管、測試人員之間無隔閡的一種開發理念。 要實現這樣的理念,就要有許多的工具進行整合,將整個專案的每個步驟串接起來。以下說明目前透過ASP.NET的專案進行的DevOps實作: 上圖為已經實作的DevOps架構,透過Jenkins為主的自動化佈建工具,將專案從開發、到測試、再到發佈產品的整個流程。 由上圖可看到開發人員(Developer)將各自開發更新的程式碼上傳git server (ex. GitHub)後,由於Jenkins已在GitHub帳號嵌入webhook,因此每當GitHub發生更新事件,就會通知Jenkins進行第一步: Download source code from github 。 Jenkins從GitHub下載最新的程式碼後進行第二步: Build source code 。此處依據專案的程式碼語言需在Jenkins中設定相對應的編譯環境。以ASP.NET Core為例,需要在Jenkins中安裝設定nuget,使Jenkins在編譯程式碼時下載相關的第三方程式庫。 而依據不同的程式碼語言,開發人員須自行開發單元測試(Unit test),在Jenkins中可設定執行Unit test程式碼以進行第三步: Unit test function 。 第四步:Source code detection ,主要是對程式碼進行bug檢測、安全性掃描、程式邏輯檢查。主要透過SonarQube進行,完成檢測後產生網頁報表、Log紀錄。 第五步:Deliver and deploy to target place。在前四步都通過後,將最後的binary file和相關的產出檔案搬移至目標機台上,甚至是直接更新部屬並運行。 PS.  - 有問題或錯誤即停止動作並透過通訊媒介(ex. Teams, e-Mail)通知相關人員。 - 1~4步屬於CI,第5步屬於CD。 - 一般來說進行完CI步驟後通知主要把關人員,確認無誤後再進行CD。 建構的步驟依序如下: [DevOps] 實作軟體CI/CD運行架構 - CI part https://programmingyourlife.blogspot.com/2020/05/devop

[DevOps] Sonarqube程式碼檢測,環境建置

Sonarqube作為程式碼的檢測,與Jenkins可搭配在CI的環境下進行建置時的自動程式碼檢測,在環境的建立上請先安裝: - 下載安裝 Java : jre-8u251-windows-x64.exe - 下載安裝 Java 11 : jdk-11.0.7_windows-x64_bin.exe - 下載安裝 Visual Studio SQL server 2017 or 2019 接著依照下述步驟安裝 - Sonarqube (https://www.sonarqube.org/downloads/) -  SonarQube Scanner for MSBuild 環境設定與執行sonarqube參考網址: https://tpu.thinkpower.com.tw/tpu/articleDetails/981         轉貼內文: 在軟體開發的生命週期中,讓產出的程式碼可以維持著高品質也是非常重要的一件事情,例如在有些公司會透過 Code Review,分析程式碼的品質及找出一些疏失問題,但若要用人工一一找出程式碼的潛在問題或安全性隱憂,實在是太花費時間和功夫了,SonarQube是一套Open Source的程式碼品質分析工具,可幫我們對程式碼的品質做更完整的檢查,並找出一些可能的安全性隱憂。 安裝SonarQube        我們先到官網下載SonarQube,點擊下方連結前往進行下載。 下載 SonarQube

[DevOps] Sonarqube程式碼檢測在Jenkins介面中自動執行

完成 "[DevOps] Sonarqube程式碼檢測,環境建置" 後,接著將Sonarqube與Jenkins結合,在Jenkins中進行自動執行Sonarqube程式碼檢測。 下載SQL Server JDBC driver 下載網址 https://www.microsoft.com/en-us/download/details.aspx?id=55539 解壓縮sqljdbc到{sonarqube}/extsnsions/jdbc-driver/mssql 資料夾下 安裝Jenkins sonarqube plugin 管理Jenkins > 管理外掛程式   可用的 > 輸入sonar > 勾選SonarQube Scanner > 按下直接安裝按鈕 Config Jenkins 管理Jenkins > Global Tool Configuation   在SonarQube Scanner for MSBuild區塊,按一下新增SonarQube Scanner for MSBuild按鈕   將Name設定為sconar Scanner,並且設定步驟(5)SonarScanner MSBuild Plugin的路徑,然後按下最下方的儲存按鈕。   管理Jenkins > 設定系統   跳到SonarQube Servers區塊後,按下Add SonarQube按鈕   依序設定Sonar Server名稱及Server URL Server URL預設是 http://localhost:9000 ,由於我們要提供給團隊成員查看sonarqube掃描結果,需要設定為sonarqube server所在的IP,然後申請防火牆開啟。   Config CI JOB(SonarQube使用Scanner Plugin) 跳到CI JOB的建置步驟,依序新增三個步驟:  Scan Begin、MSBuild及Scan End (1)在SonarQube Scanner for MSBuild – Begin Analysis區塊 Project key: ${JOB_NAME} Project name: ${JOB_NAME} Project version ${BUILD_NUMBER}   (2)

關於ASP.NET core的IHostedService的schedule task不會自動執行的問題

最近在測試 ASP.NET core 上的 IHostedService 製作的 schedule task ,發現了一個 tricky 的問題。         問題描述如下: 在 Startup.cs 中的 ConfigureServices() 裡我們會加上要重複執行的 schedule task (IHostedService) ,預期網站運行後開始背景執行這些 task ,但實際在 IIS 上測試發現兩個問題:   1.       schedule task 並不會自動執行,除非對網站進行訪問 ( 任何 http request) ,例如開啟首頁。這時那些在 ConfigureServices() 加入的 task 才會被建立並且開始運作。   2.       如果一直都沒有對網站進行訪問 ( 任何 http request) ,約 20 分鐘後所有 task 都會停止,直到下一次網站被訪問 ( 任何 http request) 才會又開始所有 task   。   基於以上兩點行為,針對第一點,我們的網站必須要每次主機開機都開一次首頁或是任何對網站的 request ,否則 schedule task 不會執行。針對第二點,我們需要確保固定時間對網站進行訪問 ( 任何 http request) ,目前的作法是每次 task 執行時就發個 request 。 ( 如果 schedule task 本來就會發 API request 就沒問題 ) ASP.NET Core的IHostedService運作行為: 這個問題目前的了解是:以IHostedService製作的schedule task,它的生命週期開始在Web server接收到任何一個http request的時候,而IIS運行Web server時並不會觸發http request,所以schedule task也就不會啟動。再來另一個狀況是,IIS有個預設的idle timeout機制,即使schedule task啟動了,如果一直都沒有對網站進行訪問(任何http request),20分鐘後會將Web server的http實體程序關閉,所以schedule task也就停止了。 非透過IIS的解決方式:      在Server開機後透過固定開