在 Windows 環境下建置 LabVIEW 專案的 GitLab CI/CD 自動化流程

在軟體開發領域中,持續整合(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. 環境準備

  1. 安裝 GitLab Runner
    • 下載 Windows 版本的 GitLab Runner
    • 註冊為 Windows 服務
    • 設定執行權限
  2. 安裝 SAS Workshops G-CLI工具 (電腦作業系統語系需改為英文版)
    • 使用 VI Package Manager 安裝下列套件
SAS Workshops工具列表

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    # 保存建置產生的執行檔

最佳實踐建議

  1. 版本控制規範
    • 使用清晰的版本命名規則
    • 建立分支管理策略
    • 定期提交程式碼
  2. CI/CD 流程設計
    • 建立完整的測試流程
    • 設定適當的觸發條件
    • 規劃部署策略
  3. 監控與維護
    • 定期檢查 Pipeline 執行狀況
    • 維護測試案例
    • 更新相依套件

學習路線圖

mindmap
  root(LabVIEW CI/CD)
    版本控制基礎
      Git 基本概念
      GitLab 使用
      分支管理
    自動化工具
      G-CLI 指令
      批次檔撰寫
      PowerShell 基礎
    CI/CD概念
      持續整合
      持續部署
      Pipeline設計
    LabVIEW技能
      專案架構
      單元測試
      建置規格
    維運管理
      監控機制
      錯誤處理
      效能優化

結論

透過結合 GitLab CI/CD 和 G-CLI,我們可以為 LabVIEW 專案建立一個強大的自動化流程。這不僅提高了開發效率,也確保了程式碼品質的一致性。雖然初期設定可能需要投入一些時間,但長期來看,這樣的投資絕對值得。

參考資源

發佈留言