大型主機系統在許多企業中仍扮演關鍵角色,但其傳統開發模式與現代 DevOps 理念存在差距。匯入 DevOps 至大型主機環境,需考量程式碼函式庫的龐大與複雜性、手動流程的低效,以及跨領域團隊協作的困難。本文將探討如何應對這些挑戰,並逐步實踐 DevOps 最佳方案,包括文化轉變、明確權責、自動化測試和 CI/CD 流程等,以提升開發效率、軟體品質和交付速度。同時,文章也將介紹 Zowe、Jenkins 等關鍵工具,以及如何運用它們來現代化大型主機開發流程,並整合至現有的 DevOps 生態系統中。

DevOps 的實踐與挑戰

DevOps 已成為現代軟體開發的重要趨勢,強調開發與維運的緊密協作,以提升軟體開發的效率和品質。然而,在大型主機(Mainframe)環境中實施 DevOps 面臨著諸多挑戰。

大型主機環境的特殊挑戰

大型主機開發通常涉及不同的專業領域,這使得跨領域培訓變得困難。此外,大型主機的程式碼函式庫往往龐大且與關鍵業務流程相關,任何微小的錯誤都可能帶來災難性的後果。更糟糕的是,由於缺乏檔案和資源,理解這些程式碼變得更加困難。

程式碼結構與維護問題

雖然大型主機的程式碼通常結構化,但仍存在複雜的結構和過時的開發方法。在持續維護的過程中,重構可能導致程式碼品質下降,並且可能存在無用的程式碼片段。

手動流程的困擾

諸如 JCL(Job Control Language)、巨集(Macros)和執行程式的指令碼等手動流程,為開發過程增加了不必要的時間浪費。

匯入 DevOps 的價值

儘管挑戰重重,但實施 DevOps 仍然具有重要的價值。根據 IDC 和 Broadcom 在 2020 年的研究報告,受訪者認為 DevOps 對大型主機環境的主要好處包括:

  1. 提升開發者的生產力
  2. 使數位業務策略更具相關性
  3. 改善法規遵循和合規報告
  4. 提升組態合規性
  5. 增強團隊協作

DevOps 最佳實踐

文化轉變

改變開發團隊的文化是實施 DevOps 的關鍵。這需要最高層(如 CIO 或 CTO)的支援,以推動變革。

嵌入式協作

讓不同團隊的成員互相嵌入對方團隊,可以促進不同觀點的交流和理解,並透過培訓提升彼此對日常工作的瞭解。

明確權責

「你構建它,你擁有它」是 DevOps 的一項重要原則。這有助於提高問責制,但需要明確權責劃分,以避免因缺乏授權而導致的失敗。

混沌測試(Chaos Monkey)

Netflix 的混沌測試實踐,透過自動化指令碼隨機關閉某些系統,以測試系統的穩健性和基礎設施的可靠性。

無責備事後檢討

在複雜的 IT 環境中,失敗是不可避免的。進行無責備的事後檢討,有助於瞭解失敗的原因,並從中學習。

DevOps 的實踐與挑戰

DevOps 是一種強調開發團隊與維運團隊協作的文化與實踐,旨在提高軟體開發與交付的效率、品質和速度。在實施 DevOps 的過程中,企業需要克服諸多挑戰,包括文化變革、技術整合和流程最佳化等。

重大事件後的反思:事後檢討的重要性

在發生重大事件後,團隊應該進行事後檢討(Postmortem),以瞭解事件的根本原因、時間線和改進建議。事後檢討的目的是促進團隊學習和成長,而不是追究個人責任。根據 Etsy 的經驗,事後檢討有助於培養持續改進的思維方式,並建立可擴充套件的內部流程和培訓設施。

將一切視為程式碼:基礎設施即程式碼

DevOps 的一個重要理念是將基礎設施和組態視為程式碼(Infrastructure as Code),透過軟體開發的最佳實踐來管理和維護基礎設施。這包括使用版本控制、自動化測試和持續整合等技術,以提高基礎設施的可靠性和可維護性。

安全性的重要性

在 DevOps 中,安全性是一個重要的考量。開發團隊可能專注於功能的開發,但往往缺乏安全性的專業知識。因此,在開發的早期階段就應該考慮安全性,以避免潛在的安全威脅和風險。

影子 IT 的問題

影子 IT 是指員工在未經 IT 部門許可的情況下,使用軟體、裝置和服務來解決問題。影子 IT 的出現往往是由於企業的 IT 部門無法滿足員工的需求,或者是因為員工缺乏合適的工具和資源。影子 IT 可能會增加安全風險和應用程式的碎片化,因此企業需要加強對影子 IT 的管理和控制。

組態管理:確保基礎設施的一致性

組態管理是 DevOps 中的一個重要實踐,旨在確保基礎設施的一致性和可靠性。組態管理工具可以自動化硬體、作業系統、服務和網路連線的組態和管理,從而減少人工錯誤和提高效率。

組態管理的方法

組態管理有多種方法,包括:

  • 宣告式(Declarative):設定期望的最終狀態,並使用自動化工具實作該狀態。
  • 命令式(Imperative):指定達到最終狀態的具體步驟。
  • 冪等性(Idempotent):多次執行相同的組態指令碼,結果保持一致。

組態管理工具和資料函式庫

一些流行的組態管理工具包括 Puppet、Chef 和 Ansible。這些工具可以幫助企業實作基礎設施的自動化和標準化。此外,組態管理資料函式庫(CMDB)可以提供一個單一的真實來源,記錄企業的硬體和軟體資產,從而提高管理和安全的效率。

DevOps 面臨的挑戰

儘管 DevOps 有許多好處,但實施 DevOps 也面臨著諸多挑戰,包括:

  • 缺乏對變革管理的熟悉度
  • 基礎設施不足
  • 資訊不完整
  • 過度採用 DevOps 實踐,導致複雜度增加

解決 DevOps 挑戰的方法

要克服這些挑戰,企業需要:

  • 設定明確的目標和里程碑
  • 建立有效的溝通和協作機制
  • 提供培訓和支援,以提高員工的技能和知識
  • 持續監控和評估 DevOps 實踐的效果

透過瞭解和解決這些挑戰,企業可以更好地實施 DevOps,提高軟體開發和交付的效率、品質和速度。#### 程式碼或技術內容解說在此區塊撰寫


### 使用 Plantuml 圖表呈現 DevOps 流程
此圖示展示了 DevOps 的基本流程,包括開發、測試、佈署和監控等階段。
#### 內容解密:
此圖表使用 Plantuml 語法繪製了一個簡單的 DevOps 流程圖,展示了開發、測試、佈署、監控和反饋等階段之間的關聯。其中:
- `graph LR` 表示圖表的方向為從左到右。
- `A[開發]``B[測試]``C[佈署]``D[監控]``E[反饋]` 分別代表 DevOps 流程中的不同階段。
- 箭頭(`-->`)表示各階段之間的流程方向。
此圖表幫助讀者理解 DevOps 的基本流程和各階段之間的關係。

## DevOps 的關鍵要素與挑戰

DevOps 的實施需要平衡多個關鍵要素,包括產品開發、工程、培訓、指標和自動化。如果其中任何一個要素被過度強調,可能會損害生產力。例如,組織可能過度關注產品功能而忽視測試,從而導致軟體品質下降。

### 培訓:DevOps 成功的關鍵

培訓是實施 DevOps 的首要任務,尤其是在初期階段。開發人員需要學習測試、可觀察性和事件回應等技能,而維運人員則需要了解軟體設計和程式設計的流程。這種跨領域的知識分享有助於團隊之間的協作和溝通。

### 指標:衡量 DevOps 的成效

為了評估 DevOps 的實施效果,組織需要建立一套關鍵績效指標(KPIs),用於衡量速度、效率、成本和品質。以下是一些主要的指標:

*   **平均還原時間(MTTR)**:系統故障的還原時間,目標是將還原時間控制在幾分鐘或幾小時內。
*   **平均檢測時間(MTTD)**:識別問題的平均時間,通常需要先進的監控系統來支援。
*   **佈署頻率**:將變更佈署到生產環境的時間,這是評估敏捷開發的重要指標。
*   **變更失敗率**:服務變更失敗的百分比,用於衡量 DevOps 環境的效率。高效率的組織變更失敗率通常在 0% 至 15% 之間。
*   **變更的前置時間**:將程式碼提交到生產環境的時間,DevOps 的目標是在一天內完成,但實際情況往往需要更長時間。

### 大型主機 DevOps 工具的挑戰

根據 BMC 和 Forrester Consulting 在 2021 年進行的調查,408 名軟體開發人員對 DevOps 工具的看法顯示:

*   76% 的受訪者認為大型主機對其組織至關重要。
*   79% 的受訪者表示其大型主機開發工具需要大幅改進。
*   58% 的受訪者認為大型主機開發比移動端系統開發更困難。
*   48% 的受訪者認為大型主機開發比雲原生開發更具挑戰性。
*   52% 的受訪者認為大型主機開發比本地工作負載更困難。

這些挑戰包括:軟體品質較低、發布時間較慢、安全性風險較高、正常執行時間和可靠性問題,以及吸引和留住頂尖技術人才的困難。

### 自動化:DevOps 的核心

自動化是 DevOps 的重要組成部分,可以簡化手動流程,讓開發人員有更多時間專注於編碼。大型主機環境可以從自動化整合開發環境(IDE)開始,因為傳統的 ISPF 和 TSO 缺乏現代化的功能,可能會降低生產力並增加招募開發人員的困難。

#### 程式碼範例:使用 Jenkins 實作 CI/CD 自動化
```groovy
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'make deploy'
            }
        }
    }
}

內容解密:

  1. pipeline 是 Jenkins Pipeline 的頂層結構,用於定義整個 CI/CD 流程。
  2. agent any 表示該 Pipeline 可以在任何可用的 Jenkins Agent 上執行。
  3. stages 定義了 Pipeline 中的不同階段,例如建構、測試和佈署。
  4. sh 'make build'sh 'make test'sh 'make deploy' 分別執行建構、測試和佈署的命令,這些命令通常在 Makefile 中定義。
  5. 這種自動化流程可以提高軟體交付的速度和品質,並減少人為錯誤。

CI/CD:現代軟體開發的核心實踐

持續整合和持續交付/佈署(CI/CD)是現代軟體開發的重要實踐。CI/CD 可以幫助組織更好地管理複雜的軟體系統,並提高交付速度和品質。

CI/CD 的好處

  • 提高軟體品質:透過自動化的測試和驗證,CI/CD 可以幫助組織在早期發現和修復缺陷,從而提高軟體品質。
  • 加快交付速度:CI/CD 可以自動化軟體的建構、測試和佈署過程,從而加快交付速度並減少人為錯誤。
  • 提高團隊協作:CI/CD 可以促進團隊之間的協作和溝通,從而提高整體效率。

DevOps工具與測試策略的多樣性

在軟體開發過程中,測試是確保產品品質的關鍵步驟。測試有多種型別,包括單元測試、驗收測試、整合測試、UI測試和迴歸測試等。這些測試方法各有其重點和優勢。

測試型別的多樣性

  1. 單元測試:著重於程式碼中的小部分,如函式或程式,通常較為快速和經濟。
  2. 驗收測試:根據業務需求評估軟體,涉及封閉式測試,測試者不知道被測試的專案。
  3. 整合測試:測試軟體的不同模組之間的協同工作。
  4. UI測試:評估軟體的可用性,雖然耗時且多為手動,但對於提供流暢的使用者經驗至關重要。
  5. 迴歸測試:確保新程式碼不會對現有功能產生負面影響。

自動化測試的重要性

撰寫可靠的測試並不容易,但從專案的早期階段開始,如在建立使用者故事時,就開始進行測試,可以提供很大的幫助。DevOps工具中的自動化測試是關鍵部分,涉及將測試資料輸入被測系統(SUT),然後比較預期結果和實際結果,從而生成報告。

CI/CD流程與工具

持續整合(CI)和持續佈署(CD)是現代軟體開發流程中的重要組成部分。CI/CD流程是一個持續進行的過程,旨在自動化流程並建立強大的監控系統。

CI/CD工具的多樣性

  • Jenkins:CI/CD領域的長官者,提供豐富的外掛程式生態系統。
  • CircleCI:使用者友好的CI/CD系統,支援JavaScript和YAML,並提供複雜功能。
  • GitLab:不僅支援CI/CD流程,還提供程式碼倉函式庫,並支援多種語言和Docker整合。
  • IBM Z Open Development IDE:具有依賴關係的構建(DBB)功能,並支援Groovy指令碼語言,能夠與Jenkins、GitHub等CI/CD系統整合。
  • ISPW:由BMC提供的CI/CD工具,具有自己的原始碼管理和佈署系統,並與企業Git、VS Code等整合。
  • Endevor:由Broadcom開發的CI/CD系統,能夠執行複雜的原始碼和釋出管理,並與其他DevOps工具整合。
  • Red Hat OpenShift Pipelines:根據Tekton的雲端CI/CD平台,在隔離的容器中執行流程,並支援IBM Z大型主機。

Zowe的功能與優勢

Zowe是一個重要的軟體平台,不僅能夠現代化大型主機開發,還推動了DevOps的發展。Zowe包括Zowe API中介層、Zowe應用框架和Zowe CLI等元件。

Zowe API中介層

為大型主機環境提供單一的REST API存取點,並內建安全性和負載平衡管理,能夠啟動TSO、Unix檔案、JES和z/OS的指令。

Zowe 應用框架與主機 DevOps 工具

Zowe 應用框架是一個可透過瀏覽器存取的系統,內建 Zowe 桌面,一個允許開發者建立外掛程式以存取大型主機服務的圖形使用者介面(GUI)。Zowe 桌面支援多種語言和框架,如 JavaScript、TypeScript、Angular 和 React,甚至可以透過 iframe 將網頁應用或內容包裝成網頁。

Zowe CLI:命令列介面

Zowe CLI 適用於 Windows、Linux 和 macOS,其使用方式類別似於操作 AWS、Google Cloud 或 Microsoft Azure 等雲端平台。使用者可以在終端機輸入命令,實作強大的功能。例如,可以建立 bash 或 shell 指令碼,與雲端服務或開源軟體整合,大幅擴充套件大型主機系統的能力。

範例:批次刪除資料集

set -e
dslist=$(zowe files ls ds "my.project.ds*")
IFS=$'\n'
for ds in $dslist
do
  echo "Deleting: $ds"
  zowe files delete ds "$ds" -f
done

內容解密:

  1. set -e:當指令碼執行過程中出現錯誤時,立即離開指令碼。
  2. dslist=$(zowe files ls ds "my.project.ds*"):列出符合 my.project.ds* 模式的資料集,並將結果存入 dslist 變數。
  3. IFS=$'\n':將內部欄位分隔符(IFS)設為換行符,使迴圈能正確遍歷包含空白的資料集名稱。
  4. for ds in $dslist:遍歷 dslist 中的每個資料集。
  5. echo "Deleting: $ds":輸出正在刪除的資料集名稱。
  6. zowe files delete ds "$ds" -f:強制刪除指定的資料集。

Zowe 外掛程式

Zowe 提供多種外掛程式,包括:

  • IBM Db2 DevOps Experience for z/OS:為資料函式庫應用提供 DevOps 方法。
  • Broadcom Endevor:與主機專用的 DevOps 平台整合。
  • Broadcom IDMS:與公司的整合式資料函式倉管理系統(IDMS)互動,提供即時指標、邏輯檢視和問題管理。
  • Zowe CLI CICS Deploy:IBM 開發的外掛程式,用於處理 CICS Transaction Server for z/OS。
  • ChangeMan ZMF Plug-in for Zowe CLI:由 Micro Focus 開發,用於與 ZMF 套件和元件互動。

BMC Jenkins 外掛程式

Jenkins 是企業環境中常見的選擇,具有豐富的整合生態系統。透過 Docker,可以建立 Jenkins 管道進行持續整合,涉及四個主要步驟:

  1. 使用 Git 複製應用程式儲存函式庫。
  2. 建立包含所有檔案和程式碼的 Docker 映像檔,由 Dockerfile 管理工作流程。
  3. 將容器映像檔推播到登入檔,以便在不同環境中儲存和共用。
  4. 執行容器映像檔。

Topaz for Total Test Jenkins 外掛程式

BMC 提供的 Topaz for Total Test Jenkins 外掛程式,可透過 BMC Topaz IDE 存取,與 COBOL 批次檔案、CICS 和 IMS 程式配合使用。需要安裝以下元件:

  • Jenkins Credentials 外掛程式
  • Compuware configuration 外掛程式
  • Topaz Workbench CLI(安裝在 Jenkins 伺服器上)
  • Host Communications Interface (HCI) Connection(在 LPAR 上執行測試)
  • Enterprise Common Components (ECC),包含 Topaz for Total Test TestRunner 主機元件

Jenkins 設定範例

在 Jenkins 建立自由專案,組態如下圖所示:

此圖示

@startuml
skinparam backgroundColor #FEFEFE

title 大型主機環境 DevOps 實踐與挑戰

|開發者|
start
:提交程式碼;
:推送到 Git;

|CI 系統|
:觸發建置;
:執行單元測試;
:程式碼品質檢查;

if (測試通過?) then (是)
    :建置容器映像;
    :推送到 Registry;
else (否)
    :通知開發者;
    stop
endif

|CD 系統|
:部署到測試環境;
:執行整合測試;

if (驗證通過?) then (是)
    :部署到生產環境;
    :健康檢查;
    :完成部署;
else (否)
    :回滾變更;
endif

stop

@enduml

內容解密:

  1. 環境 ID:指定執行測試的環境或 LPAR。
  2. CES Server URL:透過 BMC 組態設定的 URL。
  3. 登入憑證:存取主機的 TSO 登入憑證。
  4. 遞迴:在測試資料夾路徑下遞迴尋找測試案例。
  5. 測試失敗時停止:當測試案例失敗時立即停止測試。
  6. 程式碼覆寫率門檻:低於此值的程式碼覆寫率將停止建置(僅適用於 IBM Debug)。
  7. SonarQube 版本:用於產生報告的 SonarQube 版本。