1 GitLab CI/CD介绍
-
GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队自动化软件交付流程,从代码变更的检测、构建、测试到最终部署到生产环境的整个过程。
-
持续集成(CI)
- 每次代码推送至版本控制系统(如GitLab仓库),系统自动进行构建和测试。这确保了代码变更能够快速集成到主分支,同时发现并修复集成错误。
-
持续交付(CD)
- 在持续集成的基础上,进一步自动化将已验证的代码变更交付到一个预生产或生产准备就绪的环境中。这个阶段可能包括更复杂的测试套件、性能测试等,确保软件随时可以部署到生产环境,但实际部署可能需要人工审批。
-
持续部署(CD)
- 在持续交付的基础上,将交付过程完全自动化,无需人工干预即可将通过所有测试的代码直接部署到生产环境。这意味着每次代码变更经过测试后都能快速安全地到达用户手中。
2 GitLab CI/CD 与 GitLab Runner
-
GitLab CI/CD 是一套集成在GitLab平台中的服务,负责管理软件开发生命周期中的构建、测试和部署等流程。它通过读取项目中的 .gitlab-ci.yml 配置文件来定义各种任务(Jobs)和流程(Pipelines),从而实现持续集成和持续部署的目标。
-
GitLab Runner 则是实现这些CI/CD流程的实际工作者或执行引擎。它是单独部署的一个程序,可以安装在不同的操作系统(如Linux、macOS、Windows)上,并与GitLab实例进行注册和绑定。一旦有新的提交触发了GitLab CI/CD流程,GitLab会调度已注册的Runner来执行.gitlab-ci.yml中定义的任务。
-
简单来说,GitLab CI/CD是计划者和协调者,负责定义何时以及如何执行任务,而GitLab Runner则是具体执行这些任务的实体。Runner可以是共享的(服务于多个项目)或者专属的(仅为单一项目服务),并且可以根据项目需求配置不同的执行环境(例如使用Docker容器来隔离构建环境)。
3 GitLab Runner
- 官网介绍
3.1 安装
- 以Centos为例
- gitlab-runner安装包下载,在Package栏搜索gitlab-runner,可以下载这个版本 el/7/x86_64/gitlab-runner-16.6.0-1.x86_64.rpm
- 安装命令如下
-
# 安装 sudo rpm -ivh gitlab-runner-16.6.0-1.x86_64.rpm # 查看是否安装成功 gitlab-runner -h
3.2 注册
- 注册前需要先从gitlab服务器获取token。
- 在主页面的Projects中找到 Configure GitLab
- 找到CI/CD中的Runners
- 找到token保存下来
- 注册
-
# 注册runner sudo gitlab-runner register
- 注册过程中需要填入一些信息,Token就是上面复制的那个,具体如下
- 注册完刷新gitlab页面,可以看到有一个Runner实例。
- 如果找不到这个界面,可以这样访问 http://192.168.206.137/admin/runners
-
- 点击编辑
- 勾选Run untagged jobs,然后保存。
3.3 编写流水线脚本
- 首先在gitlab中创建一个项目,然后新建一个文件
- 文件名为 .gitlab-ci.yml,脚本内容就写一个最简单的测试脚本。
- 脚本内容如下
-
build: stage: build script: - echo "start build" test: stage: test script: - echo "start test" deploy: stage: deploy script: - echo "start deploy"
- 保存提交后会自动触发CI/CD流程,在Build中找到Pipelines。
- 可以看到步骤全部通过
- 点击Passed可以看到详细流程
- 点击build,就是build的执行过程
- 至此,GitLab-CI/CD 自动化部署的流程就通了。可以把 .gitlab-ci.yml 脚本中的内容修改为实际要执行的命令,这样每一次提交代码后,就会自动触发编译、测试、发布步骤。
4 项目演示
- 比较简单的自动化部署流程为:编译、测试、打包和发布。本项目就主要演示下如何实现自动化的编译、测试和发布。
- 现在创建一个项目,文件结构如下
- ├── .gitlab-ci.yml
├── main.cpp
├── README.md
└── test.sh
- ├── .gitlab-ci.yml
- .gitlab-ci.yml 内容如下
-
# 编译 build: stage: build script: - echo "start build" - g++ main.cpp -o gitlabcicd_test # 指定生成的可执行程序存放目录为当前目录 artifacts: paths: - gitlabcicd_test # 测试 test: stage: test script: - echo "start test" - chmod 0777 test.sh # 测试 - ./test.sh # 发布 deploy: stage: deploy script: - echo "start deploy" # 模拟发布流程 - cp gitlabcicd_test package1
-
- mian.cpp 中输出一个打印。
- test.sh 中运行生成的可执行程序。
- 工程写完后,push到gitlab仓库中,会自动触发cicd流程。
- 在项目中找到 Build,点击Pipelines。
- 可以看到,自动化编译、测试、发布流程成功了
- 点击一个进去,在控制台会有详细打印
- 进到GitLab Runner服务器对应目录下,可以看到自动化编译、测试、发布已经完成。