whxaxes / blog

📖 My personal blog
https://wanghx.cn/
194 stars 12 forks source link

前端也要学gitlab-ci + docker #3

Closed whxaxes closed 7 years ago

whxaxes commented 8 years ago

【前言】

gitlab-ci 和 docker其实都是出现好长时间的东西了,但是以前没怎么接触过,最近玩了一下,所以本文纯当做笔记了。

【CI简介】

ci全名Continuous Integration(持续集成),词汇的具体解释可以查看Wiki,说白了就是用于替代重复而繁杂的项目部署的自动化部署系统。而gitlab-ci,则是配套在gitlab中的一套持续集成系统。如果经常有玩github,并且有开源过组件的,基本上都知道travis-ci这东西,这个就是第三方通过github的webhook对github的项目提供的持续集成系统。如果不知道travis-ci的也没关系,当了解了gitlab-ci之后,travis-ci也就很简单了。

对gitlab-ci应用举个例子,当我push代码到gitlab的时候,gitlab-ci则会根据你的配置脚本,就可以对你的代码进行单元测试、覆盖率测试、部署灰度或者上线等等。是不是很方便?

如果想玩一下gitlab-ci,我们就得先搭一套gitlab环境,在哪里搭建呢,可以在本机搭建,也可以在vps上搭建,我是建议租个vps来搭建好,不然下载也要下好久。vps推荐z.com,国外服务器,支持支付宝,花500日元也就是三十块就能玩十多天了。

【Gitlab搭建】

以前搭gitlab好麻烦,要配各种环境之类的,但是时至今日,gitlab安装简直就是傻瓜包式了。去到gitlab官网,选择服务器系统,然后就会出来一些教你安装的命令,照着执行下去就能安装成功了,举个例子:我的服务器的是centos7。所以执行的命令是:

sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce
sudo gitlab-ctl reconfigure

照着一步一步执行下去,gitlab就可以安装在你的服务器上了,gitlab默认监听的是80端口,如果端口被占用了,那么去配置文件里面改一下配置即可,gitlab的配置文件目录是

/etc/gitlab/gitlab.rb

打开之后找到external_url=''这行,在值里面填入地址加端口号:http://100.84.95.31:8888,然后执行

sudo firewall-cmd --permanent --add-port=8888/tcp
sudo firewall-cmd --reload
sudo gitlab-ctl reconfigure
gitlab-ctl restart

gitlab服务的端口就变成8888了。

配好gitlab后就进入主题啦:gitlab-ci + docker

【Docker安装】

先讲一下docker,因为如果要把gitlab-ci和docker合起来用,就得先安装docker。

docker是一个容器技术,也可以说是一个超轻量级的虚拟机,但是docker倡导一个容器只跑一个进程,让各个服务相对独立开来。docker的具体解释可看Docker终极指南

第一步:安装docker

第二步:安装镜像,比如安装一个node的官方镜像

docker pull node

安装完后,运行docker images,就可以看到你安装的镜像目录了,就像这样

[root@wwwxhh gitlab]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mynode                  latest              21f0b54a14b6        22 hours ago        665.4 MB
node                    latest              04a4aab809b8        7 days ago          649.6 MB
node                    4.4.4               1a93433cee73        7 days ago          647 MB
gitlab-runner-build     a470667             2a4b1a3b7b26        4 weeks ago         43.7 MB
centos                  7                   778a53015523        6 weeks ago         196.7 MB
gitlab-runner-service   a470667             3ad17ec10f22        10 weeks ago        4.79 MB
gitlab-runner-cache     a470667             1cde79874428        10 weeks ago        1.114 MB

安装好docker,然后就可以配置gitlab-runner了。

【Runner配置】

首先我们要在自己服务器上安装gitlab-runner,也是很简单几条命令就安装完成

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-ci-multi-runner -y

安装好后,你就可以使用gitlab-runner的cli了,可以gitlab-runner -h看看有啥命令。紧接着,创建一个project,点击project的setting然后点Runners,就可以看到Specific runners下有一些东西,这些是注册runner要用到的。

然后就可以注册runner,在服务器执行gitlab-runner register,就会出来一些让你填的东西,第一个就是填入Specific runners下的那个ci地址,也就是http://xxx.xxx.xx/ci,然后再让你填token,也照着Specific runners下的token填就行了,再后面会有让你填executor,如果填docker,跑你的gitlab-ci的yaml脚本将会在一个docker容器环境中运行,如果填shell,则会在服务器环境中运行。注册好后,如果你的runner还没有运行,就gitlab-runner start一下,如果已经运行了,就不用再start了。

注册完runner,再回到我们的project中,就可以看到Specific runners下多了一个runner的状态,如果runner左边显示绿灯,那么我们这个runner就是可用的了。

然后,怎么在push的时候执行单元测试之类的处理呢,我们得在自己的项目下加个脚本文件叫:.gitlab-ci.yml,语法就是yaml的语法,如果不懂,可以看Gitlab Documents文档,文档里讲的相当详细,我就不再赘述了。一个简单的例子:

image: node:4.4.4

before_script:
  - npm install

stages:
  - test

build_test:
  stage: test
  script:
    - npm run test
  only:
    - master

这个脚本很简单,就是当我push代码到master分支的时候,使用4.4.4版本的node镜像创建一个容器,在容器里执行单元测试。这个脚本的前提是runner的executor是docker。如果是shell我们就可以命令docker做些其他事。

【Docker with Gitlab-ci】

to be continue ...