1.概述
Gitlab是常用的開源git代碼管理工具之一,隨着發展也推出了ci/cd解決方案.
顧名思義具體來說ci/cd主要完成以下兩個工作.
- ci(持續構建)
代碼提交後觸發自動化的單元測試,代碼預編譯,構建鏡像,上傳鏡像等. - cd(持續發佈)
持續發佈則指將構建好的程序發佈到各種環境,如預發佈環境,正式環境.
2.特性
gitlab ci/cd具有以下特性
- 跨平臺支持
只要支持go語言的平臺均可以在上面進行ci,目前基本涵蓋了大部分的操作系統. - 多語言支持
構建時是通過腳本觸發,因此基本上支持所有的語言. - Pipeline
可以通過不同的階段形成工作流 - 支持docker
可以構建docker鏡像,同時也支持觸發在Kubernetes允許.
所有特性具體見:
https://about.gitlab.com/feat...
3.結構
gitlab ci/cd是由獨立的runner程序完成,runner採用go語言編寫,因此可以很好的進行跨平臺,通常可以將runner部署到任何gitlab server之外的服務器,從而避免對gitlab server的影響.
runner項目見:
https://gitlab.com/gitlab-org...
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的具體寫法,以及關鍵字含義見:
https://docs.gitlab.com/ee/ci...
關於gitlab爲什麼使用.gitlab-ci.yml,見:
https://about.gitlab.com/2015...
4.2 runner配置
runner配置主要分爲三步:
- 首先安裝runner
安裝腳本,具體見:https://docs.gitlab.com/runne... - 然後註冊runner到gitlab
https://docs.gitlab.com/runne... - 更多配置見
https://docs.gitlab.com/runne...
5.總結
總的來說,gitlab-ci基本上可以完成完整的構建及發佈,但也會存在一些缺點:
1.發佈部分,需要將程序部署到哪個服務器固化到.gitlab-ci文件中,另外,如果runner上直接進行部署,那麼runner所在的機器則需要直接或間接的訪問所有的發佈的機器,這裏存在一定安全問題.
2.程序發佈沒有審計,對於小公司來說,這問題可能不突出,但是當研發團隊擴大,以及公司業務增加之後,對於發佈過程的權限管理以及審計則顯得很重要.