o3o3o

点滴记录

0%

使用gitlab实现可持续集成

目标

提交代码后,根据以有的配置,自动触发,进行代码测试程序或者程序的部署。

需求:

目前项目中,需要管理多个版本(32位,64位)的补丁包。每次修改完代码,提交后,都需要人手动在安装或者测试机器上,编译,安装,运行。
为将这个流程自动化,可采用gitlab 与gitlab CI (continous intergration)来实现其自动化。
针对于目前客户端侧不同企业,需要生成特定的客户端版本,也可以让其自动化。

结构:

struct

主要结构分为4部分:

  • 目标机器
    包含:1.测试机器;2.部署机器;
  • git与gitlab-ci(可持续集成服务)
    用于保存代码,与解析.gitlab-ciyml文件,触发 持续集成动作
  • git 客户端
    使用git 客户端提交代码的最终用户

工作流

  1. 用户U1,使用git 客户端,建立一个项目 repo1;
  2. repos1项目中包含文件:
1
2
>(repos1)$ ls -a
. .. .git .gitlab-ci.yml readme
  1. 修改readme文件
1
2
3
git add readme
git commit readme -m "add readme";
git push
  1. git push 执行后,提交到gitlab服务器后,gitlab服务,解析.gitlab-ci.yml,, 触发gitlab-ci-runner去处理, .gitlab-ci.yml中定义的流程;
    (前提是: gitlabci-runner要配置,并注册成功,具体配置操作说明见

工程文件内容:

  • git 工程
  • .gitlab-ci.yml 文件:
    每个工程下面使用.gitlab-ci.yml文件,来控制提交代码后,gitlab ci 解析yml文件,来获取如何去部署程序。
    gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
162deploy: # 162
stage: deploy
tags:
- deploy162
script:
- "make && make install"
only:
- master
250deploy: # 250
stage: deploy
tags:
- deploy250
script:
- "make && make install"
only:
- master

注: yml文件格式必须有tab或空格

  • tags
    deploy162, deploy250 分别指在192.168.1.162、192.168.1.250上运行的gitlab-ci-runner的名称,gitlab-ci是根据.gitlab-ci.yml中的tags来匹配具体任务由哪个runner来处理。
    上面的script是指编译安装程序。
  • script
    make && make install是指要部署到相应的服务器上时,需要执行的脚本命令.对于需要编译的程序而言,就是编译安装,而对于php等web程序而言,就是把代码复制到相应的安装目录。

流程举例:

流程如下:
demo

gitlab-runner: 配置举例 (目前192.168.1.184地址配置了gitlab-runner)

可登录gitlab网页版,查看当前注册的git-runner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[email protected] ~ $ cat /etc/gitlab-runner/config.toml
concurrent = 1
[[runners]]
url = "http://192.168.1.240/ci"
token = "fb8b064e53e21159e268853af6f8ea"
name = "Sict162"
limit = 1
executor = "ssh"
builds_dir = "/Data/git_build"
[runners.ssh]
user = "root"
host = "192.168.1.162"
port = "2222"
identity_file = "/home/michael/.ssh/id_rsa"
[[runners]]
url = "http://192.168.1.240/ci"
token = "18795ba96cfe74478ee63ff7decedd"
name = "Sict250"
limit = 1
executor = "ssh"
builds_dir = "/Data/git_build"
[runners.ssh]
user = "root"
host = "192.168.1.250"
port = "2222"
identity_file = "/home/michael/.ssh/id_rsa"
[[runners]]
url = "http://192.168.1.240/ci"
token = "87aa2b2c0f5779d5e01f9d731fb6e4"
name = "Sict236"
executor = "ssh"
builds_dir = "/Data/git_build"
[runners.ssh]
user = "root"
host = "192.168.1.236"
port = "2222"
identity_file = "/home/michael/.ssh/id_rsa"

相关链接

TIPS:

在git提交时添加[ci skip], 可以跳过gitlab-ci检测。