gitlab提供了ci/cd持续集成/持续部署的功能,当我们安装了gitlab之后,需要单独再安装gitlab-ci-multi-runner,其实就是gitlab-runner,为了试验,我们一次性安装gitlab,gitlab-ci-multi-runner,在centos7下他们需要单独的安装源,可以使用清华的gitlab-ce与gitlab-ci-multi-runner源,如下所示:

/etc/yum.repo.d/gitlab.repo

[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
gpgcheck=0
enable=0

[gitlab-ci-multi-runner]
name=gitlab-runner
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7/
gpgcheck=0
enable=0

设置好了yum源,我们直接yum makecache。接下来就是安装gitlab-ce,gitlab-ci-multi-runner了。

yum install gitlab-ce gitlab-ci-multi-runner -y

    

gitlab单机负载 gitlab ci_gitlab-ci

    安装过程很漫长,需要安装769m的各种包,主要是gitlab,别小看gitlab,他包含了一系列的组件:nginx,redis,postgresql等等,我们后续还要说这里,所以虚拟机的要求很高,我这里是使用的4G内存的vm。 gitlab单独作为gitserver使用的话,感觉和gitee,github,gitweb都差不多,如果在公司内部做git仓库,还是很常用的,毕竟加入了ci/cd之后,可以帮助我们做一些集成测试与部署,能够方便很多。

    gitlab单独安装,可以参考博客:CentOS7安装gitlab

    gitlab安装成功之后,首次使用需要进行初始化,需要运行gitlab-ctl reconfigurer,gitlab提供了一套webUI以及git仓库的功能,这些功能的实现需要借助数据库postgresql,因此初始化的时候会创建一系列的表。所以初始化的过程也很漫长。

    

gitlab单机负载 gitlab ci_gitlab-ctl_02

    gitlab-ctl reconfigure

   

gitlab单机负载 gitlab ci_gitlab-runner_03

 

    configure complete:

   

gitlab单机负载 gitlab ci_gitlab-runner_04

 

    配置完成,我们可以查看gitlab状态,默认运行了很多组件,包括前面提到的nginx,redis,postgresql等等。

    

gitlab单机负载 gitlab ci_gitlab单机负载_05

        因为gitlab安装的时候,默认安装了nginx,所以访问的时候,实际上利用nginx还做了反向代理,我们直接访问的是主机名就可以,无需增加端口。 在访问gitlab webui之前,我们需要关闭vm的防火墙,并禁用,防止下次开机再启动。

[root@gitserver yum.repos.d]# systemctl stop firewalld
[root@gitserver yum.repos.d]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

    第一次访问,虚拟机ip是:192.168.131.129,浏览器输入IP即可。

    1、首次访问需要设置密码,设置一个至少8位的密码

gitlab单机负载 gitlab ci_gitlab单机负载_06

    2、登录:

gitlab单机负载 gitlab ci_gitlab单机负载_07

 3、创建一个组:

gitlab单机负载 gitlab ci_gitlab单机负载_08

 4、组创建完毕,默认为空,提示创建工程,也就是项目仓库git repository:

gitlab单机负载 gitlab ci_gitlab-runner_09

5、项目创建在组中,默认一个空的repository:

gitlab单机负载 gitlab ci_gitlab-ctl_10

     要使用gitlab-ci,前提是我们需要新建一个组group,然后在group下新建仓库,也就是我们的项目,之后,我们可以将项目拉倒本地,编写好了代码,自测无误之后,我们提交代码,按照gitlab-ci的操作,我们还需要在gitlab的ui界面中新建一个.gitlab-ci.yml文件,这个文件就是用来做自动测试与部署的文件。有了这个文件,我们每次提交代码,他都会执行集成测试。

     光有了项目,.gitlab-ci.yml文件还是不够,我们还需要设置gitlab-runner,当我们的项目在ui界面创建之后,我们需要获取项目的token信息:

   在项目所在页面,依次点击左侧菜单的settings->ci/cd->runners->expand等选项,找到runner注册需要的token信息:

gitlab单机负载 gitlab ci_gitlab-ci_11

点击页面的expand,我们会看到关于这个项目的token:

gitlab单机负载 gitlab ci_gitlab-ctl_12

    有了token信息,我们需要执行注册:gitlab-ci-multi-runner register,按照提示,输入项目地址以及token。

    gitlab-ci-multi-runner安装之后,默认就是运行的:

    

gitlab单机负载 gitlab ci_gitlab-runner_13

    可以查看帮助,我们如何执行命令:

    

gitlab单机负载 gitlab ci_gitlab_14

    执行 gitlab-ci-multi-runner register 

    

gitlab单机负载 gitlab ci_gitlab_15

    注册runner这一步,默认填写了前面的项目url前缀,以及项目token,最后一步是选择执行器,这里默认选择shell,表示直接运行本地命令,一般是运行docker,这里是测试gitlab-ci集成,所以默认选择了shell。 

    本地代码提交到该远程仓库:首先需要在本地新建文件夹,然后执行git init,添加文件之后执行git add xxx,运行git commit -m "",设置远程仓库地址 git remote add origin http://192.168.131.129/test/webapp.git。提交:git push -u origin master,默认会提示输入用户名和密码,这里输入我们在刚进入http://192.168.131.129时设置的密码,用户名默认是root。

   本地提交之后的截图:

    

gitlab单机负载 gitlab ci_gitlab-ctl_16

    gitlab webui界面显示如下:

gitlab单机负载 gitlab ci_gitlab-ctl_17

    完成了这一步,我们的gitlab-ci准备工作才算是真正的结束。另外,.gitlab-ci.yml文件也是需要做配置的,需要一定的技巧,他需要遵守一定的语法规则,需要设定任务,以及任务执行的脚本:

    首先需要在ui界面新建文件,如下图所示:

    

gitlab单机负载 gitlab ci_gitlab-ctl_18

   在新的界面中,依次选择.gitlab-ci.yml模板,然后apply a template,选择nodejs,默认会帮助我们生成一些代码,如下所示:

gitlab单机负载 gitlab ci_gitlab-ci_19

    我们只保留文件中的一部分,然后修改测试代码运行 node app.js

    

gitlab单机负载 gitlab ci_gitlab单机负载_20

 一个简单的gitlab-ci的示例到此就配置完成了,我们需要让他自动运行,这时候就需要修改本地代码,再次提交并推送到该远程仓库。

  运行之前,需要修改一个地方:远程仓库的地址默认是http://gitlab.example.com开头,如果没有配置这个映射会报错,所以为了简单起见,我们修改如下配置文件/var/opt/gitlab/gitlab-rails/etc/gitlab.yml:

[root@gitserver etc]# pwd
/var/opt/gitlab/gitlab-rails/etc
[root@gitserver etc]# ls
database.yml  gitlab_shell_secret  gitlab_workhorse_secret  gitlab.yml  rack_attack.rb  resque.yml  secrets.yml  unicorn.rb
[root@gitserver etc]#

    修改他的host: 192.168.131.129,这样,我们在页面上看到clone的时候地址就是我们的ip地址开头的地址,而不是http://gitlab.example.com开头了。

gitlab单机负载 gitlab ci_gitlab-ci_21

    提交代码,我们在项目页面左侧菜单:CI/CD->Pipelines会看到任务列表,点进去看任务执行情况:

gitlab单机负载 gitlab ci_gitlab单机负载_22

   因为我的runner在注册的时候指定的执行器是shell,因此就是在本地运行,而我的项目需要的环境是node,.gitlab-ci.yml中指定的node app.js需要运行在node环境下,所以本机需要安装nodejs。这个安装在这里略过。

    我的app.js的内容如下:

new Promise(resolve => {
   setTimeout(function(){
     resolve("hello");
   },1000);
}).then(value => {
   console.log(value+",world.");
});

    当我们环境都配置正确之后,运行点进去正常运行的截图如下所示:

    

gitlab单机负载 gitlab ci_gitlab-ctl_23

    这是一个运行成功的示例,运行成功,再返回pipelines列表页面,状态显示passed,运行失败的显示failed:

    

gitlab单机负载 gitlab ci_gitlab-ctl_24

  

    这篇文章体验了一把gitlab-ci,主要还是gitlab的安装与gitlab-ci-multi-runner的安装,还需要注册runner,注册runner也很简单,就是对runner和project通过token做一个关联,最后需要在项目中新建一个.gitlab-ci.yml配置文件,用来设定任务执行的脚本script,脚本内容就是我们在平时项目开发完成之后,进行的一些单元测试,这里只是一个简单的示例,体验了一把gitlab-ci。正常的gitlab-ci是利用docker来做执行器。所有的操作都在docker中执行和完成,包括CI之后的CD。 

     总结一下gitlab-ci就是:1、安装gitlab,gitlab有很多组件,初次使用,需要运行gitlab-ctl reconfigure。2、安装gitlab-ci-multi-runner,默认安装完成即启动,无需手动启动,3、新建仓库之后会有一个token,我们需要通过register的方式和runner进行关联。4、编写.gitlab-ci.yml。

    需要注意的地方:1、git仓库克隆地址默认是 gitlab.example.com,需要手动修改/var/opt/gitlab/gitlab-rail/etc/gitlab.yml配置文件,修改host为我们的域名或者主机。2、代码提交即运行runner,如果显示failed,可以点进去看具体的报错信息,看看是什么原因,很多可能是环境的原因。