GitLab 是一款完全集成的軟件開發平台(fully integrated software development platform)。[1] [2] GitLab是一個基於Git的平台。

CI/CD 編輯

GitLab CI/CD 是 GitLab 內置的一款工具,用於 通過 持續方法論(continuous methodologies)的軟件開發。 該持續方法論包含三個部分:持續集成持續交付持續部署[3][4]

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

原理 編輯

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

示例如下:

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 ,提供用戶下載。[5] 利用場景如下:在Android項目中,當配置了自動化構建Artifacts後,每次提交(push)代碼後,GitLab CI/CD 將自動構建 APK文件,並在GitLab的頁面上提供下載按鈕。

任務(Job)可以自動部署文件到外部伺服器,並通過 GitLab 頁面查看該伺服器現今部署的狀態,以及進行重新部署(re-deploy)等操作。通過使用設定 environmentnameurl ,還可以在GitLab頁面直接上查看網站。[8][9] 通過該操作可以達到 持續部署 的目的。[9]

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。[10]

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

.gitlab-ci.ym 文件中通過 tags 關鍵詞選擇Runner。[13]Runner 的相關配置在 config.toml 文件中記載。[14]

與Docker結合 編輯

對 基於Docker的項目 進行構建和測試,有幾種方式。[15]一種方式是,使用shell executor進行Docker CLI命令操作。[16] 另一種方式就是使用Docker executor進行操作,它是官方推薦的操作,executor通過在Docker中使用 Docker-in-Docker鏡像 進行Job相關操作。[17]

Mattermost 編輯

Mattermost

參考文獻 編輯

  1. ^ GitLab Pricing. GitLab. [2020-03-23] (英語). 
  2. ^ User Docs | GitLab 中文文档教程. s0docs0gitlab0com.icopy.site. [2020-03-23]. 
  3. ^ GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-25]. 
  4. ^ Introduction to CI/CD with GitLab | GitLab. docs.gitlab.com. [2020-03-27]. 
  5. ^ 5.0 5.1 5.2 A beginner's guide to continuous integration. GitLab. [2020-03-27] (英語). 
  6. ^ stages. docs.gitlab.com. [2020-03-27]. 
  7. ^ pre-and-post. docs.gitlab.com. [2020-03-27]. 
  8. ^ A beginner's guide to continuous integration. GitLab. [2020-03-27] (英語). 
  9. ^ 9.0 9.1 Environments and deployments | GitLab. docs.gitlab.com. [2020-03-27]. 
  10. ^ 10.0 10.1 GitLab Runner Docs | GitLab. docs.gitlab.com. [2020-03-22]. 
  11. ^ Executors | GitLab. docs.gitlab.com. [2020-03-24]. 
  12. ^ Shell | GitLab. docs.gitlab.com. [2020-03-24]. 
  13. ^ GitLab CI/CD Pipeline Configuration Reference | GitLab. docs.gitlab.com. [2020-03-26]. 
  14. ^ Advanced configuration | GitLab. docs.gitlab.com. [2020-03-26]. 
  15. ^ Building Docker images with GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-26]. 
  16. ^ Building Docker images with GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-26]. 
  17. ^ Building Docker images with GitLab CI/CD | GitLab. docs.gitlab.com. [2020-03-26].