ZStack文檔DevOps平臺建設實踐

(一)前言

對于軟件產品而言,文檔是不可或缺的一環。文檔能幫助用戶快速了解并使用軟件,包括不限于特性概覽、用戶手冊、API手冊、安裝部署以及場景實踐教程等。由于軟件與文檔緊密耦合,面對業務的瞬息萬變以及軟件的飛速迭代,如何敏捷高效開發文檔,是擺在每個軟件公司面前必須攻克的難題。

本文從ZStack文檔實踐出發,圍繞結構化文檔開發、結合實際業務的文檔版本管理策略、文檔DevOps平臺設計思路、實際建設難題與攻克等要點,向大家全面深入介紹ZStack文檔DevOps平臺建設的成功實踐。

(二)結構化文檔開發是前提

在軟件開發領域,“Docs?as?Code”的文檔開發理念已深入人心。該理念的核心思想是將文檔作為代碼的一種形式,將其納入到軟件開發生命周期中。傳統的非結構化寫作缺乏模塊化和標準化機制,很難滿足“Docs?as?Code”高效編寫發布文檔的要求。在此背景下,結構化寫作應運而生,成為解決以上問題的有效方案。

結構化寫作十分重視信息架構設計。DITA作為結構化寫作的國際標準之一,已在業內廣泛使用。DITA(Darwin Information Typing Architecture)最初由IBM公司開發,并在2005年被開放標準組織OASIS收錄為開放標準。作為基于XML的體系結構,DITA通過內容與形式分離、內容重用、過濾與定制等機制,充分實現文檔開發的靈活性和標準性。

圖1. DITA的特點

1.內容與形式分離

DITA按模塊組織文本內容,支持DITAMAP、TOPIC、LABEL等不同層級的模塊化。

  • DITAMAP:DITAMAP是一本文檔的框架,定義文檔中包含哪些TOPIC以及TOPIC的組織形式。
  • TOPIC:TOPIC是一個完整的主題或章節。DITA提供了適用于不同場景的多種TOPIC類型,例如:Concept、Task、Troubleshooting、Reference,并通過DTD規定這些TOPIC的基本架構(即規定TOPIC必須或只能包含哪些LABEL),從而保證同類型主題/章節的規范性和風格一致性。
  • LABEL:LABEL是TOPIC中的標記對,通常是組成一個TOPIC的各種元素,包括段落、句子、短語、表格、列表、圖片等。

在文檔開發階段,開發者按照規范,逐級組織DITAMAP和TOPIC架構,并在LABEL層級進行內容編寫。這樣,既保證了開發者始終在框架規范內進行創作,也使得最終輸出的文檔層次分明。

圖2. TOPIC DTD

2.內容重用

DITA支持以模塊為單位進行不同粒度的內容重用。DITAMAP、TOPIC、LABEL均適用重用機制。

  • DITAMAP重用:將一個DITAMAP A嵌套到另一個DITAMAP B。這樣,DITAMAP B可以重用DITAMAP A的全部內容。
  • TOPIC重用:一個TOPIC可以拖動到多個DITAMAP中。這樣,多本文檔可以重用相同的章節內容。
  • LABEL:一個LABLE可以引用到多個TOPIC中。這樣,多個章節可以重用相同的句子、表格或圖片。

在文檔迭代過程中,重用機制既減少了重復勞動也保證了文檔內容一致性。一旦重用來源被修改,所有引用均會被更新。在ZStack技術文檔中,產品名稱、產品版本、術語等均以重用的形式出現在各個文檔、各個章節。一旦發生變動,這些被廣泛使用的內容可“牽一發而動全身”。

圖3. TOPIC重用

3.過濾與定制

在文檔發布階段,配置文件DITAVAL和DITA-OT決定了輸出文檔的內容和樣式。通過調整DITAVAL和DITA-OT,基于同一本DITAMAP可以發布不同內容、不同格式、不同風格的文檔,面對多樣化的業務需求和發布渠道可實現靈活定制。

  • DITAVAL:DITAVAL用于對文檔內容進行條件過濾。開發者可以在DITAVAL中定義某個標簽在輸出文檔中被剔除/包含,并給需要過濾的TOPIC、LABEL標記對應的標簽。在文檔輸出過程中,DITAVAL自動識別標簽,使對應的內容最終被呈現/隱藏,實現不同業務場景下的文檔內容定制。
  • DITA-OT:DITA-OT用于定義文檔發布樣式,包括文檔格式、封面、字體、字號、顏色、頁眉、頁腳等。靈活配置DITA-OT,可使文檔輸出為多種格式(PDF、HTML等)以配合不同的發布渠道,或改變文檔樣式風格,實現多樣化定制需求。

ZStack基于DITA構建了龐大的結構化文檔庫,總文字規模超過千萬級。由于高度模塊化和標準化,為實現文檔DevOps奠定了堅實基礎。

圖4.?結構化文檔庫

(三)結合實際業務的文檔版本管理策略

ZStack文檔庫采用GIT倉庫托管,通過GIT機制實現文檔版本控制。

在軟件開發領域,GIT是一種被廣泛使用的分布式版本控制系統。開發者在本地完成工作,通過Commit、Push操作提交至遠端,并通過Pull操作獲取遠端更新。GIT提供強大的分支管理功能,開發者可依據業務需要,靈活創建獨立分支,每個分支專注于特定任務,互不沖突。必要時,可通過分支合并實現內容匯總。

以ZStack Cloud技術文檔開發為例,在新版本開發之初,開發者基于穩定的主分支(Master Branch)開出多個特性分支(Feature Branch),并在特性分支進行獨立開發,各特性分支穩定后全部并入主分支。期間,可按需開出Bugfix分支修復問題,還可靈活響應定制項目插隊,隨時開出定制分支(Customized Branch)進行定制開發。最終,基于主分支評估開出合適的發布分支(Release Branch),用于最終發布。

圖5. ZStack?Cloud文檔分支管理

由上可見,ZStack文檔庫具備與代碼庫緊耦合的開發管理能力,同時也為實現文檔DevOps奠定了又一個堅實基礎。

(四)ZStack文檔DevOps平臺整體設計思路

由于ZStack文檔庫已實現結構化和版本控制,因此實現文檔CI/CD,建設一體化文檔DevOps管理平臺順理成章照進現實。

在軟件開發領域,CI/CD是一種通過自動化流程實現代碼持續集成、測試和部署的軟件開發實踐,旨在快速、可靠地交付高質量應用。文檔CI/CD則是通過自動化流程對結構化文檔庫進行批量構建、存儲、回傳,從而實現文檔的快速、可靠、高質量、一體化交付。

ZStack文檔DevOps平臺基于微服務架構設計,依托ZStack Cloud云平臺與Kubernetes(K8s)實現服務的容器化部署與動態編排,并通過微服務間的協同調度,完成從任務發起到構建、存儲、回傳的全流程自動化閉環。

圖6.?整體設計框架

1.安全機制
  • 內外網反向代理

將內網Flask代理服務器端口映射到外部端口上,以供輕流訪問。實現網絡隔離,確保內部服務僅通過API暴露,外部請求需經反向代理驗證。

2.API

  • Flask代理服務器

負責初步處理請求、對請求的參數做初步解析、觸發CI/CD構建任務、獲取構建記錄。

  • 可視化編譯管理界面

文檔發布者可在該界面維護文檔映射,按需觸發CI/CD構建任務。

3.基礎設施層
  • DevOps集群

內部生產環境管理平臺,用于集成CI/CD流水線。

  • Jenkins K8s集群

負責以任務為單位,執行文檔構建。

  • 數據庫

保存任務的執行參數,執行記錄以及相關Metadata。

4.任務執行層

  • 請求參數處理

請求參數標準化:將輕流傳入參數做統一處理和檢查,對不合規參數進行修改或過濾,對合規參數做預處理,以供后 續操作使用。

  • 工作區分配

文檔代碼隔離:通過工作區(Workspace),管控代碼分支,同時實現代碼隔離。

  • 文檔參數處理

DITA參數修改:針對不用的文檔構建需求,動態修改相關DITAVAL/DITA-OT文件參數。

  • 文檔構建

日志整理及輸出:根據DITA-OT構建文檔時輸出的日志,判斷構建是否成功。同時結合構建參數和相關DITAVAL/DITA-OT文件,標準化、結構化輸出日志。最后對任務的所有日志進行匯總、可視化輸出。

文檔交付件構建:通過DITA-OT構建文檔,將最終交付件輸出到MINIO對象存儲上。

(五)ZStack文檔DevOps平臺實際建設難題與攻克

1.批量構建的配置沖突

為確保文檔構建效率及規范化,對文檔構建申請以任務為單位。一個構建任務支持批量構建多本文檔,這也就不可避免會出現多本文檔使用同一個DITAVAL/DITA-OT文件,且對文件內參數需求不同。

引入工作區(Workspace)的概念,從文檔交付件維度,將不存在配置沖突的文檔構建請求放在同一工作區內,同一工作區內使用同一套DITAVAL/DITA-OT文件。在構建文檔時,按序構建每一個工作區的文檔。

2.配置文件的動態維護

DITAVAL/DITA-OT文件內相關參數由實際業務決定(如產品線名稱、文檔廠牌等),隨著業務變化,參數內容必須是動態變化、易于維護的。平臺采用一個獨立配置文件集中維護相關參數,這樣一來,當業務變化觸發參數變化時,能盡可能減少對CI/CD代碼的修改。

此外,平臺將DITA-OT文件放在一個特殊分支上維護,當構建文檔需調用時,只需對工作區內的DITA-OT文件進行替換。同樣地,當業務變化觸發參數變化時,能盡可能減少對現行分支代碼的影響。

3.文檔構建的日志分析

一次文檔構建任務可能生成大量不同文檔,若整體任務失敗,或任務中某些文檔出現問題,文檔工程師面對龐大的文檔日志,分析定位問題十分不便。

平臺對日志文件進行總結、可視化輸出。當文檔構建任務完成后,自動將所有日志進行總結,統計所有日志的編譯輸出,將使用同一套DITAVAL/DITA-OT文件的文檔構建進行整合記錄,最后輸出匯總、可視化的日志報告。

(六)ZStack文檔DevOps平臺價值

1.統一管理、直觀便捷

ZStack文檔DevOps平臺為文檔編譯發布提供統一的可視化管理界面,文檔發布者可一站式維護文檔映射、創建編譯任務,跟進編譯進程及結果。對于構建失敗的任務,可直接查看可視化日志,快速定位問題。

圖7.?集中管理文檔映射

圖8.?集中管理編譯任務

圖9.?可視化日志

2.性能強勁、提效顯著

平臺運行在DevOps集群環境上,提供強大的計算支持和靈活的資源調配,大幅縮短文檔編譯時間,面對大規模批量編譯任務,優勢尤為明顯。以ZStack Cloud全量文檔發布為例,相較于本地編譯,平臺編譯耗時縮短50%以上。

此外,針對定制化文檔場景,平臺直接對接輕流業務接口,業務人員提交定制需求后,系統全程自動完成定制開發、編譯和交付,人工僅需關注構建失敗的任務,分析失敗原因并解決。

(七)結束語

工作流程優化是提升企業效率的重要一環。ZStack文檔一直致力于敏捷高效的文檔開發管理探索與實踐。在科技迅猛發展的今天,如何擁抱新技術,創新構建最適合自身業務的工具鏈,并策略性運用到工作實踐中,提升生產力和效率,是現代企業工作者的重要挑戰。我們一起共勉。(聯合作者:潘玲、程楚喬、王幀頤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76212.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git創建分支操作指南

1. 創建新分支但不切換&#xff08;僅創建&#xff09; git branch <分支名>示例&#xff1a;創建一個名為 new-feature 的分支git branch new-feature2. 創建分支并立即切換到該分支 git checkout -b <分支名> # 傳統方式 # 或 git switch -c <分支名&g…

package.json 中的那些版本數字前面的符號是什么意思?

1. 語義化版本&#xff08;SemVer&#xff09; 語義化版本的格式是 MAJOR.MINOR.PATCH&#xff0c;其中&#xff1a; MAJOR&#xff1a;主版本號&#xff0c;表示不兼容的 API 修改。MINOR&#xff1a;次版本號&#xff0c;表示新增功能但保持向后兼容。PATCH&#xff1a;修訂號…

如何有效防止服務器被攻擊

首先&#xff0c;我們要明白服務器被攻擊的危害有多大。據不完全統計&#xff0c;每年因服務器遭受攻擊而導致的經濟損失高達數十億。這可不是一個小數目&#xff0c;就好比您辛苦積攢的財富&#xff0c;瞬間被人偷走了一大半。 要有效防止服務器被攻擊&#xff0c;第一步就是…

Chainlit 快速構建Python LLM應用程序

背景 chainlit 是一款簡單易用的Web UI goggle&#xff0c;它支持使用 Python 語言快速構建 LLM 應用程序&#xff0c;提供了豐富的功能&#xff0c;包括文本分析&#xff0c;情感分析等。 這里我們以官網openai提供的例子&#xff0c;快速的開發一個帶有UI的聊天界面&#xf…

華為OD機試真題——硬件產品銷售方案(2025A卷:100分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《硬件產品…

【數據結構_6】雙向鏈表的實現

一、實現MyDLinkedList&#xff08;雙向鏈表&#xff09; package LinkedList;public class MyDLinkedList {//首先我們要創建節點&#xff08;因為雙向鏈表和單向鏈表的節點不一樣&#xff01;&#xff01;&#xff09;static class Node{public String val;public Node prev…

做Data+AI的長期主義者,加速全球化戰略布局

在Data與AI深度融合的新紀元&#xff0c;唯有秉持長期主義方能真正釋放數智化的深層價值。2025年是人工智能從技術爆發轉向規模化落地的關鍵節點&#xff0c;也是標志著袋鼠云即將迎來十周年的重要里程碑。2025年4月16日&#xff0c;袋鼠云成功舉辦了“做DataAI的長期主義者——…

構建基于PHP和MySQL的解夢系統:設計與實現

引言 夢境解析一直是人類心理學和文化研究的重要領域。隨著互聯網技術的發展,構建一個在線的解夢系統能夠幫助更多人理解自己夢境的含義。本文將詳細介紹如何使用PHP和MySQL構建一個功能完整的解夢系統,包括系統架構設計、數據庫模型、核心功能實現以及優化策略。 本文源碼下…

【桌面】【系統應用】Samba共享文件夾

目錄 場景一&#xff1a;銀河麒麟桌面與銀河麒麟桌面之間共享文件夾 環境準備 實現目標 操作步驟 &#xff08;一&#xff09;配置主機A共享文件夾 1、環境準備 2、在主機A創建共享文件夾 3、設置共享文件密碼 &#xff08;二&#xff09;主機B訪問主機A 場景二&…

OpenCV 圖形API(37)圖像濾波-----分離過濾器函數sepFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 應用一個可分離的線性濾波器到一個矩陣&#xff08;圖像&#xff09;。 該函數對矩陣應用一個可分離的線性濾波器。也就是說&#xff0c;首先&a…

webpack理解與使用

一、背景 webpack的最初目標是實現前端工程的模塊化&#xff0c;旨在更高效的管理和維護項目中的每一個資源。 最早的時候&#xff0c;我們通過文件劃分的方式實現模塊化&#xff0c;也就是將每個功能及其相關狀態數據都放在一個JS文件中&#xff0c;約定每個文件就是一個獨立…

rac環境下,增加一個控制文件controlfile

先關閉節點二&#xff0c;在節點一上操作 1、查看控制文件個數和路徑 SQL> show parameter control 2、備份參數文件 SQL> create pfile/home/oracle/orcl.pfile20250417 from spfile; 3、修改控制文件參數 SQL> alter system set contr…

git安裝(windows)

通過網盤分享的文件&#xff1a;資料(1) 鏈接: https://pan.baidu.com/s/1MAenYzcQ436MlKbIYQidoQ 提取碼: evu6 點擊next 可修改安裝路徑 默認就行 一般從命令行調用&#xff0c;所以不用創建。 用vscode&#xff0c;所以這么選擇。

Spring Boot整合難點?AI一鍵生成全流程解決方案

在當今的軟件開發領域&#xff0c;Spring Boot 憑借其簡化開發流程、快速搭建項目的優勢&#xff0c;成為了眾多開發者的首選框架。然而&#xff0c;Spring Boot 的整合過程并非一帆風順&#xff0c;常常會遇到各種難點。而飛算 JavaAI 的出現&#xff0c;為解決這些問題提供了…

Python批量處理PDF圖片詳解(插入、壓縮、提取、替換、分頁、旋轉、刪除)

目錄 一、概述 二、 使用工具 三、Python 在 PDF 中插入圖片 3.1 插入圖片到現有PDF 3.2 插入圖片到新建PDF 3.3 批量插入多張圖片到PDF 四、Python 提取 PDF 圖片及其元數據 五、Python 替換 PDF 圖片 5.1 使用圖片替換圖片 5.2 使用文字替換圖片 六、Python 實現 …

山東大學軟件學院創新項目實訓開發日志(15)之中醫知識問答歷史對話查看bug處理后端信息響應成功但前端未獲取到

在開發中醫知識問答歷史對話查看功能的時候&#xff0c;出現了前后端信息獲取異同的問題&#xff0c;在經過非常非常非常艱難的查詢之后終于解決了這一問題&#xff0c;而這一問題的罪魁禍首就是后端沒有setter和getter方法&#xff01;&#xff01;&#xff01;&#xff01;&a…

Arkts應用全局UI狀態存儲和持久化V2(AppStorageV2、PersistenceV2和@Type)

目錄 應用全局UI狀態存儲和持久化V2版本 AppStorageV2 connect remove keys 示例 使用限制 PersistenceV2 connect remove keys save notifyOnError 示例 使用限制 Type 使用限制 應用全局UI狀態存儲和持久化V2版本 以下實例AppStorageV2、PersistenceV2和裝飾…

最大子序和問題——動態規劃/貪心算法解決

目錄 一&#xff1a;問題描述 二&#xff1a;解決思路1——動態規劃思想 三&#xff1a;C 語言代碼實現 四&#xff1a;復雜度分析 五&#xff1a;解決思路2——貪心算法思想 六&#xff1a;具體步驟 七: C語言代碼實現 八&#xff1a;復雜度分析 一&#xff1a;問題描述 …

【Python入門】文件讀取全攻略:5種常用格式(csv/excel/word/ppt/pdf)一鍵搞定 | 附完整代碼示例

大家好&#xff0c;我是唐叔&#xff01;今天給大家帶來一篇Python文件讀取的終極指南。無論是數據分析、辦公自動化還是爬蟲開發&#xff0c;文件讀取都是Python程序員必須掌握的核心技能。本文將詳細介紹Python處理5大常用文件格式的方法&#xff0c;包含完整可運行的代碼示例…

四、小白如何用Pygame制作一款跑酷類游戲(頁面暫停和主角跑步動作的實現)

四、小白如何用Pygame制作一款跑酷類游戲&#xff08;頁面暫停和主角跑步動作的實現&#xff09; 提示&#xff1a;寫完文章后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 四、小白如何用Pygame制作一款跑酷類游戲&#xff08;頁面暫停和主…