GitLab配置CI持续集成

GitLab配置CI持续集成

第一节 简介

1.1 概念

  • Gitlab-CI :Gitlab-CI是GitLab Continuous Integration(Gitlab持续集成)的简称。从Gitlab的8.0版本开始,gitlab就全面集成了Gitlab-CI,并且对所有项目默认开启。只要在项目仓库的根目录添加.gitlab-ci.yml文件,并且配置了Runner(运行器),那么每一次合并请求(MR)或者push都会触发CI pipeline。
  • Gitlab-runner :Gitlab-runner是.gitlab-ci.yml脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。考虑到GitLab Runner的资源消耗问题和安全问题,GitLab Runner不建议和Gitlab安装在同一台机器上。Gitlab Runner分为两种,Shared runners和Specific runners。Specific runners只能被指定的项目使用,Shared runners则可以运行所有开启 Allow shared runners选项的项目。
  • Pipeline :管道,每次commit或MR都会执行一次pipeline构建任务,包含多个阶段如测试、编译。
  • Stage :阶段,每个Pipeline有多个Stage,从上向下执行,前一个执行成功才能执行下一个。
  • Job :任务,CI/CD的最小运行单位,表示在指定Stage下执行的任务工作,可以有多个Job,并行执行。
  • Badges :徽章,当Pipelines执行完成,会生成徽章,你可以将这些徽章加入到你的README.md文件或者你的网站。

1.2 特性

gitlab ci/cd具有以下特性:

  • 跨平台支持:只要支持go语言的平台均可以在上面进行ci,目前基本涵盖了大部分的操作系统.
  • 多语言支持:构建时是通过脚本触发,因此基本上支持所有的语言.
  • Pipeline:可以通过不同的阶段形成工作流
  • 支持docker:可以构建docker镜像,同时也支持触发在Kubernetes允许.

  所有特性:GitLab Continuous Integration (CI) & Continuous Delivery (CD)

1.3 结构

CI/CD架构

  gitlab ci/cd是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响.

  runner项目:gitlab-runner

第二节 案例

2.1 新建一个Spring Boot项目

  新建项目,添加一些demo代码,运行测试。

2.2 新建GitLab项目

  登陆GitLab创建项目,并复制URL。

  提交项目代码到对应URL。

2.3 添加.gitlab-ci文件

  创建.gitlab-ci.yml,【.gitlab-ci.yml】用来配置 CI 用你的项目中做哪些操作。当有新内容push到仓库后,GitLab会查找是否有.gitlab-ci.yml文件,如果文件存在,Runners将会根据该文件的内容开始 build 本次 commit。

  gitlab通过在项目的根目录放置.gitlab-ci.yml文件来触发pipline,文件书写遵循yml语法,因此,概括来说gitlab ci/cd只需要两步。

  • 写好.gitlab-ci.yml文件,并放置到项目根目录
  • 配置好gitlab runner.完成后,提交代码时会自动根据gitlab-ci.yml的触发条件进行执行相应的stage.

  如下简单的.gitlab-ci.yml - maven项目,更多案例可以参考官网CI/CD examples

1
2
3
4
5
6
7
8
9
10
11
12
13
image: docker:latest
services:
- docker:dind

stages:
- build
- package
- deploy

maven-build:
image: maven:3-jdk-8
stage: build
script: "mvn package"

  配置好.gitlab-ci.yml文件之后,只要把它加入git后然后推送到远程仓库,CI就会开始自动化集成

2.4 配置一个Runner

  runner配置主要分为三步:

  登陆服务器安装gitlab-ci-multi-runner,笔者是一台Centos服务器。

考虑到GitLab Runner的资源消耗问题和安全问题,GitLab Runner不建议和Gitlab安装在同一台机器上,但笔者因为只有一台服务器所以先布置在一起了。

  1. 添加repository
1
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  1. 安装包
1
yum install gitlab-runner
  1. 注册runner
1
sudo gitlab-runner register

注册共享的Runner需要gitlab的admin权限

  1. 输入Gitlab CI地址
  2. 输入项目CI token
  3. 输入 Runner 描述
  4. 输入 Runner 标签,可以多个,用逗号隔开
  5. 输入 Runner 执行的语言 (e.g. shell)

CI/CD

  相关数据值可以在登录gitlab之后,下图所示位置找到,先点击右上方Admin Settings,再找到左侧列表的runners

CI/CD

  注册完成之后,GitLab-CI立刻就会多出一条Runner记录,启动runner,点击为Project启用Runner

1
2
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start

2.5 提交代码

  推送到服务器后,pipeline一直处于struck状态,提示:This job is stuck, because the project doesn’t have any runners online assigned to it. Go to Runners page.

  检查一下确认Runner处于正常状态。

  出现这种情况可能是因为我们注册的Runner设置了TAG,但Job并没有。所以要按照以下4个步骤使我们的Runner能够在没有标记的情况下执行:

CI/CD

CI/CD

  配置后Job成功运行,但是检查失败了,如下图所示。

CI/CD

  很明显是因为服务器缺失Maven工具,登陆服务器,安装Maven。

1
sudo yum install maven

  再次提交,问题解决,maven开始下载依赖。

CI/CD

  执行成功。

CI/CD

2.6 扩展

  未完待续


参考:

🔗 基于Gitlab CI搭建持续集成环境
🔗 Deploy a Spring Boot application to Cloud Foundry with GitLab CI/CD
🔗 Continuous delivery of a Spring Boot application with GitLab CI and Kubernetes
🔗 Spring Boot Micro Service with gitlab CI
🔗 GitLab-CI安装