簡體   English   中英

如何更新 gitlab CI/CD 中的子模塊

[英]How to update submodules in a gitlab CI/CD

我在以下樹中組織了一個項目

|.
|..
|-- devops
|-- project1
|-- project2

在 devops 文件夾中,我將其他兩個項目作為子模塊包含在內,因為這兩個項目是由兩個不同的團隊獨立開發的。

|.
|..
|-- project1@0deed0fa
|-- project2@0beef0fb
|-- .gitlab-ci.yml

我已經設置了管道來部署項目。 每當任何項目有新的提交時,都會設置一個觸發器來運行devops項目管道。 作為 devops 作業的一部分,我運行git submodule命令來獲取和合並。 然后構建。 有用。

我遇到的問題是,在一段時間內,對子模塊進行了很多更改。 每次對任何項目進行提交時,都會重播從最后一個子模塊提交到 devops 項目文件夾的更改。 每月一次,我手動更新devops項目文件夾並更新到子模塊項目的最新提交。 我可以提交來自 devops 管道任務的更改,但這將在同一個 devops 管道中生成新管道。 (我沒有測試,但看起來很明顯)。

作為 devops 管道的一部分,有什么方法可以將子模塊更新為最新提交?

謝謝。

只構建一次二進制文件

使用 git 子模塊不是實現集成管道的最佳實踐。 影響深遠的書籍《 持續交付》在“ Only Build Your Binaries Once (第 5 章)一節中陳述了以下內容:

許多構建系統使用版本控制系統中保存的源代碼作為許多步驟的規范源代碼。 在提交過程中,代碼將在不同的上下文中重復編譯,在驗收測試時再次編譯,[等等]每次編譯代碼時,都會冒引入一些差異的風險。

此外,重新編譯需要花費大量時間,導致反饋周期更長。 建議是:

在構建的提交階段,您應該只構建一次二進制文件。 這些二進制文件應該存儲在某個地方的文件系統中 [...] ,以便在管道的后期階段輕松檢索它們。

CI/CD 管道流

按照這種范式,您的工作流程將如下所示:

  1. project1project2的功能分支上工作的開發人員將推送一個提交
  2. 觸發構建二進制文件、運行單元/組件測試和打包容器的項目管道
  3. 如果一切順利,二進制文件或容器將部署到“開發”存儲庫
  4. 項目管道將觸發您的下游 devops 管道,該管道將從存儲庫下載二進制文件/容器。
  5. devops 管道集成各個部分並運行端到端測試
  6. 如果 E2E 測試通過,二進制文件/容器將部署(也稱為提升)到release存儲庫
  7. 如果你正在進行持續交付,你會在這里部署到生產環境,但許多團隊更喜歡在手動工作中按下按鈕

請注意源代碼是如何只構建一次的。

流行的二進制存儲庫

有許多流行的二進制存儲庫可用。 大多數都有免費和付費的專業版。 查看他們的網站以獲取更多信息。

  1. GitLab 作業工件(階段或管道之間)
  2. GitLab Package RegistryGitLab Container Registry
  3. GitHub Package RegistryGitHub Container Registry
  4. JFrog 神器
  5. 連結資料庫
  6. 雲存儲容器注冊表( AWS ECRGCP CRAzure CR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM