GitLab

基於 Git 的軟體開發平台

GitLab是由GitLab公司開發的、基於Git的整合軟體開發平台。[8][9]另外,GitLab且具有wiki以及線上編輯、issue跟蹤功能、CI/CD等功能。在2018年,GitLab被認為是一家部份是烏克蘭的獨角獸企業[10][11]

GitLab
網站類型
Git倉庫代管服務
DevOps平台[1]
語言英語
股票代號NASDAQGTLB[2]
業務範圍 全世界
持有者GitLab Inc.
創立者
  • Sid Sijbrandij
  • Dmitriy Zaporozhets
  • Valery Sizov
代表人物
  • Sid Sijbrandij (CEO)
  • Dmitriy Zaporozhets (CTO)
產業軟體行業
營業額 1.522億美元 (2021年)[3]
員工1,765[4](截至2022年4月 (2022-04)
網址gitlab.com
商業性質
註冊可選
推出時間2011年,​13年前​(2011
現狀線上
程式語言RubyGoVue.js
GitLab Application
目前版本
  • 17.0(2024年5月16日;穩定版本)[6]
編輯維基數據鏈結
原始碼庫gitlab.com/gitlab-org/gitlab
程式語言RubyGoJavaScript
作業系統跨平台
平台x86-64ARMhf
授權條款MIT授權條款 (社群版)[7]/商業授權 (商業版)
網站商業版(包括專有元件):about.gitlab.com
社群版(不含專有元件):gitlab.com/gitlab-org/gitlab

CI/CD

GitLab CI/CD是GitLab內建的一款工具,用於通過持續方法論頁面存檔備份,存於網際網路檔案館)(continuous methodologies)的軟體開發。 該持續方法論包含三個部分:持續整合持續交付持續部署[12][13]

  • 持續整合(Continuous Integration,簡稱CI),每次在上傳代碼塊到基於Git倉庫時,持續整合 會執行指令碼去構建、測試、校驗代碼,這些操作是在合併到預設分支之前進行的。
  • 持續交付(Continuous Delivery,簡稱CD),在持續整合之後(即合併到預設分支之後),持續交付 將進行手動部署應用。
  • 持續部署(Continuous Deployment,簡稱CD),在持續整合之後(即合併到預設分支之後),持續部署 將進行自動部署應用。

原理

當開發者組態了GitLab CI/CD,那麼當開發者使用Git提交(commit),那麼就會觸發CI/CD相關的一系列操作。這一系列操作由GitLab Runner執行,相關組態記載於.gitlab-ci.yml檔案中,執行的結果將在GitLab頁面中展示。[14] 每一次的提交(commit)將會觸發一條管線(pipeline),管線是不同階段(Stage)的任務(Job)的一個集合。[14] 階段(Stage)用於邏輯切割,同一階段的任務以並列方式執行,階段間是順序執行,上一個階段執行失敗,下一個階段將不會執行。[15] .pre 為第一階段(譯為:之前) 和 .post 最後階段(譯為:提交時),這兩個階段不需要被定義,也無法被修改。[16]

範例如下:

stages:
  - build
  - test
  - deploy

job 0:
  stage: .pre
  script: make something useful before build stage

job 1:
  stage: build
  script: make build dependencies

job 2:
  stage: build
  script: make build artifacts

job 3:
  stage: test
  script: make test

job 4:
  stage: deploy
  script: make deploy

job 5:
  stage: .post
  script: make something useful at the end of pipeline

任務(Job)可以構建Artifacts ,提供使用者下載。[14] 利用場景如下:在Android專案中,當組態了自動化構建Artifacts後,每次提交(push)代碼後,GitLab CI/CD 將自動構建 APK檔案,並在GitLab的頁面上提供下載按鈕。 任務(Job)可以自動部署檔案到外部伺服器,並通過 GitLab 頁面檢視該伺服器現今部署的狀態,以及進行重新部署(re-deploy)等操作。通過使用設定 environmentnameurl ,還可以在GitLab頁面上直接檢視網站。[17][18] 通過該操作可以達到 持續部署 的目的。[18]

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
  environment:
    name: staging
    url: http://172.23.0.2:5000/
  only:
  - master
  tags:
    - Runner名称

GitLab Runner

GitLab Runner 是一項開源專案,用於執行任務(Job),並將執行結果傳輸回GitLab。[19]

Runner 可安裝在作業系統,也可以通過Docker的方式安裝。當 Runner 安裝後,需要將其註冊在 GitLab 中,方可使用。Runner 有若干種執executor可供使用,如:DockerShellSSH[19] Runner 預設使用Shell,Shell模式下,所有構建都會發生在Runner安裝的機器中,操作十分簡單,但是缺點很多。[20][21]

.gitlab-ci.ym 檔案中通過 tags 關鍵詞選擇Runner。[22]Runner 的相關組態在 config.toml 檔案中記載。[23]

與Docker整合

對基於Docker的專案 進行構建和測試,有幾種方式。一種方式是,使用shell executor進行Docker CLI命令操作。 另一種方式就是使用Docker executor進行操作,它是官方推薦的操作,executor通過在Docker中使用 Docker-in-Docker頁面存檔備份,存於網際網路檔案館)鏡像進行Job相關操作。[24]

事件

GitLab於2017年1月31日發佈一系列緊急通告稱,位於荷蘭的系統管理員因操作失誤而刪除了包含310GB產品資料的資料夾,在取消刪除操作後僅剩下4.5GB。運維人員之後檢查發現,網站宣稱和配備的多項備份措施均未正常運作或難以利用。GitLab在YouTube直播了恢復資料的過程[25]。網站最終遺失了最後 6 小時的資料庫資料(包括問題、合併請求、評論、片段等,不含代碼庫)[26]

參考文獻

  1. ^ GitLab 14 Delivers Modern DevOps in One Platform. DevPro Journal. July 12, 2021 [2022-05-04]. (原始內容存檔於2022-01-30). 
  2. ^ Sijbrandij, Sid. GitLab goes public on Nasdaq a $10 billion IPO. CNBC. October 14, 2021 [2022-05-04]. (原始內容存檔於2022-01-25). 
  3. ^ Pendleton, Devon. CEO Who Built GitLab Fully Remote Worth $2.8 Billion on IPO. Bloomberg.com. October 14, 2021 [2022-05-04]. (原始內容存檔於2022-02-08). 
  4. ^ GitLab Team. [2022-05-04]. (原始內容存檔於2018-11-25). 
  5. ^ GitLab.com Alexa Ranking. Alexa Internet. [2018-06-05]. (原始內容存檔於2021-02-02). 
  6. ^ GitLab 17.0 released with generally available CI/CD Catalog and AI Impact analytics dashboard. [2024年5月17日] (英語). 
  7. ^ GitLab Community Edition LICENSE file. [2018-01-31]. (原始內容存檔於2019-07-02). 
  8. ^ User Docs | GitLab. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2020-11-30). 
  9. ^ Git | GitLab. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2020-04-02). 
  10. ^ GitLab, founded by a Ukrainian citizen, raised $100 million. It became a unicorn valued at $ 1.1 billion. AIN.UA. 2018-10-30 [2019-09-27]. (原始內容存檔於2021-06-28) (美國英語). 
  11. ^ Dmytro Zaporozhets, GitLab: "I believe that GitLab can be called a Ukrainian startup". AIN.UA. 2018-11-30 [2019-09-27]. (原始內容存檔於2022-02-21) (美國英語). 
  12. ^ GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-25]. (原始內容存檔於2020-12-10). 
  13. ^ Introduction to CI/CD with GitLab | GitLab. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2020-11-28). 
  14. ^ 14.0 14.1 14.2 A beginner's guide to continuous integration. GitLab. [2020-03-27]. (原始內容存檔於2021-01-10) (英語). 
  15. ^ stages. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2021-01-29). 
  16. ^ pre-and-post. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2021-01-29). 
  17. ^ A beginner's guide to continuous integration. GitLab. [2020-03-27]. (原始內容存檔於2021-01-10) (英語). 
  18. ^ 18.0 18.1 Environments and deployments | GitLab. docs.gitlab.com. [2020-03-27]. (原始內容存檔於2020-11-24). 
  19. ^ 19.0 19.1 GitLab Runner Docs | GitLab. docs.gitlab.com. [2020-03-22]. (原始內容存檔於2021-02-02). 
  20. ^ Executors | GitLab. docs.gitlab.com. [2020-03-24]. (原始內容存檔於2021-01-10). 
  21. ^ Shell | GitLab. docs.gitlab.com. [2020-03-24]. (原始內容存檔於2021-01-10). 
  22. ^ GitLab CI/CD Pipeline Configuration Reference | GitLab. docs.gitlab.com. [2020-03-26]. (原始內容存檔於2021-01-31). 
  23. ^ Advanced configuration | GitLab. docs.gitlab.com. [2020-03-26]. (原始內容存檔於2021-02-02). 
  24. ^ Building Docker images with GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-26]. (原始內容存檔於2021-02-02). 
  25. ^ Working on restoring GitLab.com. FAQ below.. [2017-02-02]. (原始內容存檔於2020-10-31). 
  26. ^ GitLab.com Database Incident. GitLab. 2017-02-01 [2017-02-10]. (原始內容存檔於2019-09-09). 

外部連結