在軟體開發領域中,持續整合(CI)和持續部署(CD)已經成為提升程式碼品質和開發效率的重要實踐。然而,對於使用 LabVIEW 的工程師來說,CI/CD 的概念可能較為陌生。本文將分享如何在 Windows 環境下,結合 GitLab 和 G-CLI 工具,為 LabVIEW 專案建立自動化的 CI/CD 流程。
環境需求
- 開發環境:Windows 11
- 版本控制:Git + GitLab.com
- LabVIEW 2020 以上的版本開發環境
- SAS Workshops G-CLI
- GitLab Runner
系統架構
graph A[開發者] -->|Push 程式碼| B[GitLab.com] B -->|觸發 Pipeline| C[GitLab Runner] C -->|執行| D[G-CLI] D -->|建置/測試| E[LabVIEW 專案] E -->|回傳結果| B
以執行角度來看
flowchart TB subgraph WIN11["Windows 11 開發/建置環境"] direction TB IDE["LabVIEW IDE"] GIT["Git Client"] GCLI["SAS Workshops G-CLI Toolkit"] RUNNER["GitLab Runner"] subgraph BUILD["建置輸出"] SPEC["Build Specifications"] TEST["Test Cases"] ART["Artifacts - 執行檔- 安裝包- 測試報告"] end IDE --> GIT RUNNER --> GCLI GCLI --> SPEC GCLI --> TEST SPEC --> ART TEST --> ART end subgraph GITLAB["GitLab.com"] REPO["Repository"] PIPE["CI/CD Pipeline"] end %% 連接關係 GIT <--> REPO REPO --> PIPE PIPE --> RUNNER %% 樣式設定 classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px; classDef windows fill:#D4E6F1,stroke:#2874A6,stroke-width:2px; classDef gitlab fill:#E8DAEF,stroke:#6C3483,stroke-width:2px; classDef build fill:#D5F5E3,stroke:#196F3D,stroke-width:2px; classDef components fill:#FFFFFF,stroke:#2C3E50,stroke-width:2px; class WIN11 windows; class GITLAB gitlab; class BUILD build; class IDE,GIT,GCLI,RUNNER,SPEC,TEST,ART components; %% 註解 style REPO fill:#E8DAEF,stroke:#6C3483,stroke-width:2px; style PIPE fill:#E8DAEF,stroke:#6C3483,stroke-width:2px;
實作步驟
1. 環境準備
- 安裝 GitLab Runner
- 下載 Windows 版本的 GitLab Runner
- 註冊為 Windows 服務
- 設定執行權限
- 安裝 SAS Workshops G-CLI工具 (電腦作業系統語系需改為英文版)
- 使用 VI Package Manager 安裝下列套件

2. SAS Workshops G-CLI 工具
SAS Workshops G-CLI 提供了豐富的命令列介面,可用於:
- clearlvcache – 用於清除LabVIEW緩存的G-CLI工具
- vipc – 用於應用VIPC文件的G-CLI工具
- lvbuildspec – 用於構建LabVIEW構建規範的G-CLI工具
- vitester – 用於運行VI測試儀測試的G-CLI工具
- lunit – 用於運行LUnit Tests的G-CLI工具
- vipb – 用於從vipb構建規範構建VIPM軟件包的G-CLI工具
- vip – 用於安裝VIPM套件的G-CLI工具
3. GitLab CI 設定
在專案根目錄建立 .gitlab-ci.yml
檔案:
# GitLab CI/CD 配置文件
# 用於自動化 LabVIEW 專案的測試和建置流程
variables: # 全域變數設定區
# Runner 設定
BUILD_MACHINE_TAG: "LabVIEW" # 需要與gitlab.com上的 Runner 的標籤名稱一致
# LabVIEW 相關設定
GCLI_LV_VERSION: "2020" # LabVIEW 版本號(必須是4位數)
GCLI_LV_ARCH: "32" # LabVIEW 架構(32位元或64位元)
GCLI_LV_TIMEOUT: "1500000" # 執行超時設定(25分鐘,單位為毫秒)
# 專案相關路徑設定
LVPROJ_PATH: "demo-ci.lvproj" # LabVIEW 專案檔案路徑
EXE_BUILD_SPEC: "demo-ci application" # 執行檔建置規格名稱
EXE_BUILD_DIR: "build/exe" # 執行檔輸出目錄(需加入 .gitignore)
# 測試相關設定
TEST_PATH: "test" # 測試檔案目錄
UNIT_TEST_REPORT_PATH: "UnitTestReport.xml" # 單元測試報告輸出檔案(需加入 .gitignore)
# LabVIEW 安裝路徑
LABVIEW_PATH: "C:\\Program Files (x86)\\National Instruments\\LabVIEW 2020"
CARAYA_PATH: "vi.lib\\addons\\_JKI Toolkits\\Caraya\\CarayaCLIExecutionEngine.vi"
# 完整路徑設定(使用 GitLab CI/CD 內建變數)
FULL_TEST_PATH: "${CI_PROJECT_DIR}\\${TEST_PATH}" # 完整測試路徑
TEST_REPORT_PATH: "${CI_PROJECT_DIR}\\${UNIT_TEST_REPORT_PATH}" # 完整測試報告路徑
# 版本號設定(使用 GitLab pipeline ID 作為建置號碼)
FULL_VERSION: "1.0.0.${CI_PIPELINE_IID}" # 完整版本號(主版本.次版本.修訂版本.建置號碼)
# CI/CD 流程階段定義
stages:
- test # 第一階段:執行測試
- build # 第二階段:建置執行檔
# 單元測試任務
UNIT_TEST:
stage: test
tags:
- $BUILD_MACHINE_TAG # 使用指定的 Runner
before_script:
- echo "開始執行單元測試,測試路徑:${FULL_TEST_PATH}" # 執行前的提示訊息
script:
# 執行 Caraya 測試引擎
- g-cli --lv-ver "${GCLI_LV_VERSION}" "${LABVIEW_PATH}\\${CARAYA_PATH}" -- -s "${FULL_TEST_PATH}" -x "${TEST_REPORT_PATH}" -v 0
artifacts:
reports:
junit: $UNIT_TEST_REPORT_PATH # 將測試報告標記為 JUnit 格式
when: always # 無論成功失敗都保存測試報告
allow_failure: true # 允許測試失敗但繼續執行後續階段
# 建置執行檔任務
BUILD_EXE:
stage: build
needs:
- UNIT_TEST # 相依於單元測試任務
tags:
- $BUILD_MACHINE_TAG # 使用指定的 Runner
script:
# 清除快取
- g-cli --timeout "${GCLI_LV_TIMEOUT}" --lv-ver "${GCLI_LV_VERSION}" --arch "${GCLI_LV_ARCH}" ClearCache
# 建置執行檔
- g-cli --timeout "${GCLI_LV_TIMEOUT}" --lv-ver "${GCLI_LV_VERSION}" --arch "${GCLI_LV_ARCH}" lvbuildspec -- -v "${FULL_VERSION}" -p "${LVPROJ_PATH}" -b "${EXE_BUILD_SPEC}"
artifacts:
paths:
- $EXE_BUILD_DIR # 保存建置產生的執行檔
最佳實踐建議
- 版本控制規範
- 使用清晰的版本命名規則
- 建立分支管理策略
- 定期提交程式碼
- CI/CD 流程設計
- 建立完整的測試流程
- 設定適當的觸發條件
- 規劃部署策略
- 監控與維護
- 定期檢查 Pipeline 執行狀況
- 維護測試案例
- 更新相依套件
學習路線圖
mindmap root(LabVIEW CI/CD) 版本控制基礎 Git 基本概念 GitLab 使用 分支管理 自動化工具 G-CLI 指令 批次檔撰寫 PowerShell 基礎 CI/CD概念 持續整合 持續部署 Pipeline設計 LabVIEW技能 專案架構 單元測試 建置規格 維運管理 監控機制 錯誤處理 效能優化
結論
透過結合 GitLab CI/CD 和 G-CLI,我們可以為 LabVIEW 專案建立一個強大的自動化流程。這不僅提高了開發效率,也確保了程式碼品質的一致性。雖然初期設定可能需要投入一些時間,但長期來看,這樣的投資絕對值得。