??本文將介紹CI/CD的基本概念,以及如何使用Gitlab來實(shí)現(xiàn)CI/CD。
??本文介紹的CI/CD項(xiàng)目為個(gè)人Gitlab項(xiàng)目:gitlab_ci_test,訪問網(wǎng)址為:https://gitlab.com/jclian91/gitlab_ci_test。
CI/CD的含義
??在現(xiàn)代軟件工程中,CI即持續(xù)集成(Continuous integration)
,CD有兩重含義,即持續(xù)交付(Continuous Delivery)
和持續(xù)部署(Continuous Deployment)
,CI/CD是軟件工程中的重要過程。
??CI,聯(lián)系到具體的開發(fā)運(yùn)維場(chǎng)景,就是指開發(fā)者在完成項(xiàng)目中的一個(gè)小特性后,將自己分支的代碼合并到測(cè)試分支,這個(gè)過程就是集成,在集成過程中,會(huì)運(yùn)行一系列代碼格式的檢查、單元測(cè)試等嚴(yán)格保證項(xiàng)目質(zhì)量的檢查作業(yè)。
??CD有兩種含義:
- 持續(xù)交付,完成CI中的所有作業(yè)后,持續(xù)交付可自動(dòng)將已驗(yàn)證的代碼發(fā)布到儲(chǔ)存庫。持續(xù)交付是擁有可隨時(shí)部署到生產(chǎn)環(huán)境的artifaces或Docker鏡像,這一過程一般
手動(dòng)實(shí)現(xiàn)
。 - 持續(xù)部署,鑒于部署環(huán)境和部署方式的差異以及各種應(yīng)用之間的耦合,部署這一項(xiàng)任務(wù)不再是簡單的幾行命令就能搞定的了。持續(xù)部署意味著只要提交了代碼,就可以實(shí)現(xiàn)將代碼自動(dòng)部署至指定環(huán)境,如測(cè)試環(huán)境、開發(fā)環(huán)境等。這對(duì)于項(xiàng)目開發(fā)是十分方便、高效的。
??Gitlab CI/CD
最初是Gitlab于2015年6月發(fā)布的一個(gè)特性,它支持在項(xiàng)目中編寫一個(gè).gitlab-ci.yml
文件來定義一組自動(dòng)化作業(yè)(Job),這些自動(dòng)化作業(yè)組成一條自動(dòng)化流水線(Pipeline)。2016年,Gitlab又推出了自研的Gitlab Runner
軟件包,以此作為流水線的運(yùn)行環(huán)境。當(dāng)開發(fā)者提交或合并代碼時(shí),Gitlab CI/CD會(huì)自動(dòng)運(yùn)行測(cè)試用例,構(gòu)建、部署環(huán)境,并且開發(fā)者能在Gitlab中看到整個(gè)流程的所有信息,包括日志、流程和artifacts,不需要登錄Gitlab之外的任何平臺(tái)。
??Gitlab CI/CD的典型工作流程如下:
??Gitlab CI/CD特性如下:
- 開源: CI/CD是開源GitLab社區(qū)版和專有GitLab企業(yè)版的一部分。
- 易于學(xué)習(xí): 詳細(xì)的官方操作文檔。
- 無縫集成: CI/CD是GitLab的一部分,支持從計(jì)劃到部署,具有出色的用戶體驗(yàn)。
- 可擴(kuò)展: 可以根據(jù)需要添加任意數(shù)量的構(gòu)建節(jié)點(diǎn)。
- 更快的結(jié)果: 每個(gè)構(gòu)建可以拆分為多個(gè)作業(yè),這些作業(yè)可以在多臺(tái)計(jì)算機(jī)上并行運(yùn)行。
- 針對(duì)交付進(jìn)行了優(yōu)化: 多個(gè)階段,手動(dòng)部署, 環(huán)境和變量。
Gitlab Runner
??Gitlab Runner是一個(gè)用于運(yùn)行Gitlab CI/CD流水線作業(yè)的軟件包,由Gitlab官方開發(fā),完全開源,支持在主流的系統(tǒng)上安裝、運(yùn)行,比如Windows, Linux, MacOS等。在筆者的MacOS系統(tǒng)中,安裝方式為:
brew install gitlab-runner
??Gitlab Runner分為三種類型,在注冊(cè)Runner過程中使用不同類型的token就能區(qū)分不同的類型。
- Shared Runners,共享Runner,可以被倉庫里面的任意項(xiàng)目使用。token獲取位置為全局管理中心-Runner-注冊(cè)令牌。
- Group Runners,組Runner,僅能被某個(gè)組中的任意項(xiàng)目使用。token獲取位置為項(xiàng)目群組-CICD-Runner-注冊(cè)令牌。
- Specific Runners,特定Runner,僅能被指定的項(xiàng)目使用。token獲取位置為項(xiàng)目-設(shè)置-CICD-Runner-注冊(cè)令牌。
??本文中使用Specific Runners
,我們?yōu)轫?xiàng)目申請(qǐng)?zhí)囟≧unner,如下圖:
- 創(chuàng)建項(xiàng)目Runner
2. 選擇Linux平臺(tái),tags自己填寫,點(diǎn)擊Create Runner按鈕
3. Runner創(chuàng)建完畢,可獲取url和token
4. 在本地電腦上,注冊(cè)Runner:gitlab-runner register --url https://gitlab.com --token glrt-xxx
,token為第3步中的token。
5. 查看Runner及運(yùn)行Runner:
6. 至此,項(xiàng)目中的Runner已配置完畢,我們可以運(yùn)行CI/CD流水線了。
.gitlab-ci.yml
??在一個(gè)項(xiàng)目中,流水線文件通常是放在.gitlab-ci.yml文件中,該文件采用YAML格式書寫。
??在編寫.gitlab-ci.yml文件前,我們需了解幾個(gè)基本概念。
- 流水線(Pipeline):流水線由.gitlab-ci.yml文件定義,它是一系列作業(yè)的組裝。這些作業(yè)按照一個(gè)順序運(yùn)行,行程一條流水線。觸發(fā)流水線的操作可以是代碼推送、創(chuàng)建tag、合并請(qǐng)求,以及定時(shí)觸發(fā)。
- 階段(Stages):流程組成流水線,主要用于給作業(yè)分組。階段會(huì)由上到下按順序執(zhí)行。
- 作業(yè)(Job):作業(yè)組成階段,是最基礎(chǔ)的執(zhí)行單元。同一個(gè)階段的作業(yè)是并行運(yùn)行的。
??以下是一個(gè)測(cè)試流水線,它包含3個(gè)階段:install,build,deploy,順序執(zhí)行,每個(gè)階段都有各自的作業(yè)。當(dāng)代碼提交至主分支時(shí),便會(huì)觸發(fā)流水線。
stages:
- install
- build
- deploy
install_job:
stage: install
script:
- echo "hello install"
build_job:
stage: build
script:
- echo "hello build"
deploy_job:
stage: deploy
script:
- echo "hello deploy"
我們查看deploy_job的運(yùn)行結(jié)果:
??接下來,我們對(duì)本項(xiàng)目進(jìn)行流水線配置,如下:
stages:
- build
- deploy
build-job:
stage: build
script:
- echo `date`
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
deploy-job:
image: docker
# necessary for my macbook
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: "tcp://docker:2375"
services:
- docker:dind
# necessary for my macbook
stage: deploy
script:
- docker build -t flask_blue_print:$CI_COMMIT_SHORT_SHA .
- docker run -d -p 5005:5000 --name flask_demo flask_blue_print:$CI_COMMIT_SHORT_SHA
- docker ps
該流水線的階段為:build和deploy,build階段中的build-job進(jìn)行簡單測(cè)試,deploy階段中的deploy-job使用Docker進(jìn)行部署。
流水線采用Docker部署,執(zhí)行成功,但本地電腦的Docker服務(wù)并沒有運(yùn)行該服務(wù),原因?yàn)镚itlab與Gitlab-Runner不在一個(gè)環(huán)境中。文章來源:http://www.zghlxwxcb.cn/news/detail-498659.html
總結(jié)
??本文主要介紹了CI/CD的基本概念以及Gitlab CI/CD的簡單使用。有了Gitlab CI/CD,我們就可以保證項(xiàng)目代碼質(zhì)量(需代碼測(cè)試),并且方便、高效地進(jìn)行代碼更新,持續(xù)集成和持續(xù)部署,對(duì)于我們提高工作效率有很大改善。文章來源地址http://www.zghlxwxcb.cn/news/detail-498659.html
參考文獻(xiàn)
- gitlab-ci的簡易入門—基于python項(xiàng)目的CI演示:https://mp.weixin.qq.com/s/aQmdusndVdxHo1rrj7eg1w
- docker部署gitlab CI/CD (二)終篇:部署gitlab runner和添加gitlab-ci.yml文件 終極踩坑版:https://www.cnblogs.com/gaoxiong666/p/17336256.html
- Gitlab CI/CD 簡單介紹:https://blog.csdn.net/wangjiang_qianmo/article/details/122867335
- Gitlab官方網(wǎng)站:https://docs.gitlab.com/ee/ci/
- Gitlab CI/CD從入門到實(shí)戰(zhàn),龐夢(mèng)臣著,人民郵電出版社,2023-04-01
到了這里,關(guān)于Gitlab CI/CD入門(一)Python項(xiàng)目的CI演示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!