gitlab 實現CI/CD

g4zhuj發表於2018-04-21

1.概述

Gitlab是常用的開源git程式碼管理工具之一,隨著發展也推出了ci/cd解決方案. 顧名思義具體來說ci/cd主要完成以下兩個工作.

  • ci(持續構建)
    程式碼提交後觸發自動化的單元測試,程式碼預編譯,構建映象,上傳映象等.

  • cd(持續釋出)
    持續釋出則指將構建好的程式釋出到各種環境,如預釋出環境,正式環境.

圖片描述

2.特性

gitlab ci/cd具有以下特性

  • 跨平臺支援
    只要支援go語言的平臺均可以在上面進行ci,目前基本涵蓋了大部分的作業系統.
  • 多語言支援
    構建時是通過指令碼觸發,因此基本上支援所有的語言.
  • Pipeline
    可以通過不同的階段形成工作流
  • 支援docker
    可以構建docker映象,同時也支援觸發在Kubernetes允許.

所有特性具體見: 連結

3.結構

圖片描述

gitlab ci/cd是由獨立的runner程式完成,runner採用go語言編寫,因此可以很好的進行跨平臺,通常可以將runner部署到任何gitlab server之外的伺服器,從而避免對gitlab server的影響.

runner專案見:連結

4.gitlab ci/cd流程

gitlab通過在專案的根目錄放置.gitlab-ci.yml檔案來觸發pipline,檔案書寫遵循yml語法,因此,概括來說gitlab ci/cd只需要兩步,

  • 寫好.gitlab-ci.yml檔案,並放置到專案根目錄
  • 配置好gitlab runner. 完成後,提交程式碼時會自動根據gitlab-ci.yml的觸發條件進行執行相應的stage.

4.1 gitlab-ci.yml檔案

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script: echo "Running tests"
  only:
  - tags

build:
  stage: build
  script: echo "Building the app"
  only:
  - tags

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
  environment:
    name: staging
    url: https://staging.example.com
  only:
  - tags

deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  environment:
    name: production
    url: https://example.com
  when: manual
  only:
  - tags

複製程式碼

如上,是一個具有ci/cd功能的.gitlab-ci.yml檔案的寫法,

.gitlab-ci.yml的具體寫法,以及關鍵字含義見: 連結

關於gitlab為什麼使用.gitlab-ci.yml,見: 連結

4.2 runner配置

runner配置主要分為三步:

  • 首先安裝runner 安裝指令碼,具體見:
    /C連結

  • 然後註冊runner到gitlab
    連結

  • 更多配置見
    連結

5.總結

總的來說,gitlab-ci基本上可以完成完整的構建及釋出,但也會存在一些缺點:
1.釋出部分,需要將程式部署到哪個伺服器固化到.gitlab-ci檔案中,另外,如果runner上直接進行部署,那麼runner所在的機器則需要直接或間接的訪問所有的釋出的機器,這裡存在一定安全問題.
2.程式釋出沒有審計,對於小公司來說,這問題可能不突出,但是當研發團隊擴大,以及公司業務增加之後,對於釋出過程的許可權管理以及審計則顯得很重要.

相關文章