Gitlab CI/CD入门(一)Python项目的CI演示

  本文将介绍CI/CD的基本概念,以及如何使用Gitlab来实现CI/CD。
  本文介绍的CI/CD项目为个人Gitlab项目:gitlab_ci_test,访问网址为:https://gitlab.com/jclian91/gitlab_ci_test

CI/CD的含义

  在现代软件工程中,CI即持续集成(Continuous integration),CD有两重含义,即持续交付(Continuous Delivery)持续部署(Continuous Deployment),CI/CD是软件工程中的重要过程。
  CI,联系到具体的开发运维场景,就是指开发者在完成项目中的一个小特性后,将自己分支的代码合并到测试分支,这个过程就是集成,在集成过程中,会运行一系列代码格式的检查、单元测试等严格保证项目质量的检查作业。
  CD有两种含义:

  1. 持续交付,完成CI中的所有作业后,持续交付可自动将已验证的代码发布到储存库。持续交付是拥有可随时部署到生产环境的artifaces或Docker镜像,这一过程一般手动实现
  2. 持续部署,鉴于部署环境和部署方式的差异以及各种应用之间的耦合,部署这一项任务不再是简单的几行命令就能搞定的了。持续部署意味着只要提交了代码,就可以实现将代码自动部署至指定环境,如测试环境、开发环境等。这对于项目开发是十分方便、高效的。

  Gitlab CI/CD最初是Gitlab于2015年6月发布的一个特性,它支持在项目中编写一个.gitlab-ci.yml文件来定义一组自动化作业(Job),这些自动化作业组成一条自动化流水线(Pipeline)。2016年,Gitlab又推出了自研的Gitlab Runner软件包,以此作为流水线的运行环境。当开发者提交或合并代码时,Gitlab CI/CD会自动运行测试用例,构建、部署环境,并且开发者能在Gitlab中看到整个流程的所有信息,包括日志、流程和artifacts,不需要登录Gitlab之外的任何平台。
  Gitlab CI/CD的典型工作流程如下:
CI/CD流程
  Gitlab CI/CD特性如下:

  • 开源: CI/CD是开源GitLab社区版和专有GitLab企业版的一部分。
  • 易于学习: 详细的官方操作文档
  • 无缝集成: CI/CD是GitLab的一部分,支持从计划到部署,具有出色的用户体验。
  • 可扩展: 可以根据需要添加任意数量的构建节点。
  • 更快的结果: 每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行。
  • 针对交付进行了优化: 多个阶段,手动部署, 环境和变量。

Gitlab Runner

  Gitlab Runner是一个用于运行Gitlab CI/CD流水线作业的软件包,由Gitlab官方开发,完全开源,支持在主流的系统上安装、运行,比如Windows, Linux, MacOS等。在笔者的MacOS系统中,安装方式为:

brew install gitlab-runner

  Gitlab Runner分为三种类型,在注册Runner过程中使用不同类型的token就能区分不同的类型。

  • Shared Runners,共享Runner,可以被仓库里面的任意项目使用。token获取位置为全局管理中心-Runner-注册令牌。
  • Group Runners,组Runner,仅能被某个组中的任意项目使用。token获取位置为项目群组-CICD-Runner-注册令牌。
  • Specific Runners,特定Runner,仅能被指定的项目使用。token获取位置为项目-设置-CICD-Runner-注册令牌。

  本文中使用Specific Runners,我们为项目申请特定Runner,如下图:

  1. 创建项目Runner


2. 选择Linux平台,tags自己填写,点击Create Runner按钮

3. Runner创建完毕,可获取url和token

4. 在本地电脑上,注册Runner:gitlab-runner register --url https://gitlab.com --token glrt-xxx,token为第3步中的token。

5. 查看Runner及运行Runner:

6. 至此,项目中的Runner已配置完毕,我们可以运行CI/CD流水线了。

.gitlab-ci.yml

  在一个项目中,流水线文件通常是放在.gitlab-ci.yml文件中,该文件采用YAML格式书写。
  在编写.gitlab-ci.yml文件前,我们需了解几个基本概念。

  • 流水线(Pipeline):流水线由.gitlab-ci.yml文件定义,它是一系列作业的组装。这些作业按照一个顺序运行,行程一条流水线。触发流水线的操作可以是代码推送、创建tag、合并请求,以及定时触发。
  • 阶段(Stages):流程组成流水线,主要用于给作业分组。阶段会由上到下按顺序执行。
  • 作业(Job):作业组成阶段,是最基础的执行单元。同一个阶段的作业是并行运行的。

  以下是一个测试流水线,它包含3个阶段:install,build,deploy,顺序执行,每个阶段都有各自的作业。当代码提交至主分支时,便会触发流水线。

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的运行结果:
deploy_job作业执行成功
  接下来,我们对本项目进行流水线配置,如下:

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进行简单测试,deploy阶段中的deploy-job使用Docker进行部署。
流水线执行成功
deploy-job执行成功
流水线采用Docker部署,执行成功,但本地电脑的Docker服务并没有运行该服务,原因为Gitlab与Gitlab-Runner不在一个环境中。

总结

  本文主要介绍了CI/CD的基本概念以及Gitlab CI/CD的简单使用。有了Gitlab CI/CD,我们就可以保证项目代码质量(需代码测试),并且方便、高效地进行代码更新,持续集成和持续部署,对于我们提高工作效率有很大改善。

参考文献

  1. gitlab-ci的简易入门—基于python项目的CI演示:https://mp.weixin.qq.com/s/aQmdusndVdxHo1rrj7eg1w
  2. docker部署gitlab CI/CD (二)终篇:部署gitlab runner和添加gitlab-ci.yml文件 终极踩坑版:https://www.cnblogs.com/gaoxiong666/p/17336256.html
  3. Gitlab CI/CD 简单介绍:https://blog.csdn.net/wangjiang_qianmo/article/details/122867335
  4. Gitlab官方网站:https://docs.gitlab.com/ee/ci/
  5. Gitlab CI/CD从入门到实战,庞梦臣著,人民邮电出版社,2023-04-01

猜你喜欢

转载自blog.csdn.net/jclian91/article/details/131258147