為什麼要建構系統?

回報問題 查看原始碼 。 。 。 。 夜間7.3 。 。 7.2 。 。 7.1 。 。 7.0 。 。 6.5

本頁面說明建構系統、其用途、為何應使用 建構系統,以及為何編譯器和建構指令碼並非最佳選擇 開始擴充規模適用於沒有太多儲存空間的開發人員 提供建構系統的使用體驗

什麼是建構系統?

基本上,所有建構系統都有直接的用途:轉換 將原始碼編寫成可讀取的可執行二進位檔 儲存空間建構系統不只適用於人為編寫的程式碼。也允許 無論是針對測試或發布版本 。在擁有數千名工程師的組織中,我們常常需要 多數版本會自動觸發,而不是由工程師直接觸發。

不能只使用編譯器?

建構系統的需求未必能立即顯而易見。大多數工程師 學習編寫程式碼時不會使用建構系統,大多從叫用工具開始 例如 gccjavac。或者, 整合式開發環境 (IDE)。只要所有原始碼都位於 相同的指令可以正常運作

javac *.java

這會指示 Java 編譯器取得目前版本中的每個 Java 來源檔案 並轉換為二進位類別檔案在最簡單的情況下 。

不過,只要程式碼展開,小工具就會開始執行。javac 很聰明 足以在目前目錄的子目錄中尋找程式碼 匯入。但無法找到儲存在 Google Cloud 後端其他部分的程式碼 檔案系統 (也許是由多項專案共用的程式庫)此外, 瞭解如何建構 Java 程式碼大型系統通常涉及 以及各式各樣的程式設計語言,其中又具有依附關係的網頁 意味著,單一語言的編譯器可能無法建構整個系統。

當您要處理多種語言或多重編譯的程式碼時 建構程式碼不再只是一個步驟現在,您必須評估 您的程式碼就取決於依附元件,並以適當順序建構這些片段 每項元素都有一套不同的工具如有任何依附元件變更,您必須 重複此程序,以避免取決於過時的二進位檔。針對偶數 中等的規模,這個過程很快就會變得繁瑣且容易出錯。

編譯器也不知道如何處理外部 依附元件,例如 Java 中的第三方 JAR 檔案。如果沒有建構系統 可以從網際網路下載依附元件 儲存在硬碟的 lib 資料夾中,並設定編譯器以讀取 從該目錄選取程式庫長期下來,想要維持 這些外部依附元件的更新、版本和來源。

殼層指令碼呢?

假設興趣專案一開始就要很簡單就能上手 但您開始遇到本文所述的一些問題 像是剛才說過,即便 VM 正在運作 您還是能變更 VM 可用性政策或許還是不認為自己需要建構系統,而且可以自動化處理 透過一些簡單的 shell 指令碼輕鬆處理繁瑣工作 以正確順序建構模型這項功能有一段時間可以派上用場 就會遇到更多問題:

  • 這就會變得很繁瑣。隨著系統日益複雜,您需開始支出 幾乎花時間處理建構指令碼和實際程式碼偵錯 殼層指令碼很痛苦,層層層疊出越來越多的駭客攻擊 彼此呼叫

  • 這類速度相當慢。如要確保您不會意外使用過時的程式庫, 想建構指令碼時 可以執行您想多加入一些邏輯 偵測哪些部分需要 結果聽起來很複雜,而且容易出錯或 建議指定每次需要重建的部分 你又回來是正方形了

  • 好消息:現在要發布新聞稿了!更妥善地釐清所有引數 您就需要傳遞到 jar 指令來完成最終建構。別忘了 如何上傳資料並推送到中央存放區建構與建構 推送說明文件更新,並傳送通知給使用者。嗯... 或許這把程式碼另做成其他指令碼...

  • 太慘了!您的硬碟當機了,現在您需要重新建立整個 有些人會將 Cloud Storage 視為檔案系統 但實際上不是你太聰明瞭,可以將所有來源檔案存放在版本中 但對於您下載的程式庫呢?你找得到他們嗎 並確認剛才使用的是相同版本 已下載的影片?您的指令碼可能仰賴特定工具: 安裝於特定位置 — 您能否還原相同的環境, 指令碼是否再次運作?而您設定的所有環境變數呢 才能讓編譯器正常運作,然後忘了?

  • 儘管發生問題,您的專案仍能成功, 開始招募更多工程師現在您發現不會發生災難 就必須經歷相同的痛苦 每當有新開發人員加入您的團隊時,就必須啟動引導程序。且 即使您已盡最大努力 系統人們多部機器上的工作很有用,很常發生 且每次需要數小時偵錯工具路徑 找出差異處。

  • 決定您需要讓建構系統自動化。理論上來說 就像取得新電腦 然後設定執行建構作業 系統每晚都使用 Cron 執行指令碼。還是細心應對 造成人類大腦的助益。 偵測並解決小問題每天早上,你收到 ,我們之所以在昨晚的建構失敗,是因為開發人員昨天 變更了可在系統上運作,但沒有在自動化系統中執行的變更 建構系統每次只選擇一種簡單的解決方式 卻經常發生在 使用者每天花大量時間 探索並應用這些簡單的 找出程式碼中的安全漏洞和錯誤 並提供修正建議

  • 隨著專案規模的成長,建構速度會變慢。一天,等待中 您偶爾會看著應用程式的閒置桌面 正在使用度假的同事 浪費運算力

您遇到了一個常見的規模問題,這裡有位開發人員在 最多需要一百幾行程式碼 一直以來都是這個初階開發人員的 就只需要使用編譯器。劇本可以稍微 。當您需要協調多個開發人員 即使是完美的建構指令碼也是如此 這種機器上的細微差異難以理解到目前為止 這個簡單的做法會分析問題,現在則要投入實際建構系統。