跳到主要內容

發表文章

Visual Studio 軟體開發的授權問題

使用Visual Studio開發各種軟體產品非常的方便,此款地表最強軟體開發工具涵蓋了各種的程式語言。但在授權上需要注意一下,否則很有可能會被微軟收取罰金。         Visual Studio Community可以在任何狀況下使用,但是要商業用途(賣產品)只限個人創作,公司組織的話除非是開放原碼、教育、學術研究,除此之外皆不可使用。 因此公司組織要用Visual Studio做產品的話,一種做法是買一套Professional版本,開發時用 Community 版本,要Release給客戶時用 Professional 或更高級的版本編譯;另一種做法是不考慮轉用更高級版本,那麼一開始就採用 Express 版可以降低未來轉換之困擾。 但需要知道 Express 版少了許多功能(例如 Code Coverage、Profiling ...),並且從2019開始微軟不再推出Express版本,也意味著沒有"公司組織免費使用Visual Studio開發產品"的選項了。 微軟雖然不再推出Express版本,但有另一個免費的IDE工具VS code,也可用來開發軟體,只是相對來說Visual Studio只稱得上是一個程式編輯器,如果要在VS code上開發如Winform的程式,就要使用第三方的工具了,以下提供幾個VS code上開發的連結: VS code上開發Winform https://ironmansoftware.com/building-a-windows-form-app-with-powershell-in-vs-code/ VS code上開發ASP.NET core https://blog.johnwu.cc/article/asp-net-core-3-starting.html
最近的文章

[PyAutoGUI] 用程式控制鍵盤滑鼠的動作

想透過程式指令控制鍵盤滑鼠的行為,在Windows下一般可以透過VBScript,但是VBScript較適合針對鍵盤事件,至於滑鼠行為的控制在VBScript中沒有提供原生的控制功能,必須透過第三方提供的API進行實現。通常使用Windows Excel提供的API來完成,但Excel在不同的版本下有不同的差異,在不同的Windows 版本下又有不同相容性問題。 因此建議用Python提供的 PyAutoGUI 實作,前提是需要安裝Python和PyAutoGUI套件。 PS. 透過auto-py-to-exe-master將python source code編譯成執行檔(.exe)即可在任何Windows環境下執行而不用擔心相容性問題了。 參考連結: PyAutoGUI : 使用Python控制電腦

[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開機後透過固定開

[DevOps] 實作軟體CI/CD運行架構 - ASP.NET Core test unit 單元測試

ASP.NET Core的單元測試(Test Unit)建置方式參考: MSTest : https://ithelp.ithome.com.tw/articles/10209386 建置出的UnitTest.cs class中可以建立多個[TestMethod],若以ASP.NET Core的project來看,就是在UnitTest.cs中針對要測試的controller進行測試,new一個欲測試的controller instance,叫用要測試的controller function,傳入測試的參數即可。 Controller function回應的result可用原有的 Assert 判斷是否符合預期結果,或是第三方的 FluentAssertions 。 FluentAssertions : https://marcus116.blogspot.com/2019/04/unittest-fluent-assertions.html 執行測試 : [測試] -> [執行] -> [所有測試] 將資訊存入log file 透過Nuget安裝NLog.Config和NLog.Web.AspNetCore: 安裝後可看到project多了一個NLog.config檔案: 打開NLog.config,依序在Targets及Rules區塊新增以下設定 Targets <target name="logfile" xsi:type="File" fileName="C:\temp\log\${shortdate}\debug.log"         layout="${date}| ${level} | ${message}"/> <target name