Gitlab通过GitLab-Runner持续集成

Posted by 聪少 on 2018-08-13

GitLab、GitLab-CI、GitLab-Runner

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

这里简单介绍一下gitlab相关的应用

GitLab-CI

GitLab-CI就是一套配合GitLab使用的持续集成系统(当然,还有其它的持续集成系统,同样可以配合GitLab使用,比如Jenkins)。而且GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的。

GitLab-Runner

GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。

GitLab-CI与GitLab-Runner关系示意图

GitLab-CI与GitLab-Runner关系示意图

Docker中部署GitLab-Runner

安装Docker

参考Docker安装

启动指定配置文件目录的gitlan-runner(如我的配置目录为下)

1
/srv/gitlab-runner/config
1
2
3
4
5

docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
注意: 在Mac下使用/Users/Shared 来替代 /srv.

或者可以使用挂载自定义数据卷并运行runner:

1
2
3
4
5
6
7
8
9
docker run -d --name gitlab-runner-config \
-v /etc/gitlab-runner \
busybox:latest \
/bin/true

docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
--volumes-from gitlab-runner-config \
gitlab/gitlab-runner:latest
注意上述是启动一个已经有配置的gitlab-runner

Register

(从头开始配置,上面的可以不用看,官方文档顺序就这么写的,我看到这里也懵逼了。。。。)

如果你从来没有跑过gitlab-runner,也按照我上面的教程进行到这里了,那么请执行下面两行:

1
2
docker stop gitlab-runner
docker rm gitlab-runner

下面才是我们第一次的实践,请运行以下命令,/srv/gitlab-runner/config为上一步的配置目录(和我不一样可以换成自己的):

1
2
3
4
5
6
7
8
9
10
11
12

docker run --rm -d -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner --name gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--executor "shell" \
--url "http://10.100.7.46:8088" \
--registration-token "yWZLWrCcynm9WYc-Fdwy" \
--description "blink" \
--tag-list "blink" \
--run-untagged \
--locked="false"

docker run -d -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner --name gitlab-runner gitlab/gitlab-runner register

把上面的参数换成自己的,我这里使用的是最简单的shell,token获取参考下面,上述第一步是注册,第二步是启动gitlab-runner

项目token的截图:
打开自己要cicd的项目
2
点击cicd
3
点击Expand
4
查看token并复制出来
5

到这里gitlab-runner就算部署成功了,下面是触发ci

编辑一个最简单的.gitlab-ci.yml,然后提交到gitlab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 定义 stages
stages:
- build
- test
# 定义 job
job1:
stage: test
script:
- echo "I am job1"
- echo "I am in test stage"
# 定义 job
job2:
stage: build
script:
- echo "I am job2"
- echo "I am in build stage"

查看结果
6
OK到这里就差不多了,祝你好运!