gameFu's Blog

centos7下完整配置gitlab及gitlab-ci docker测试

March 08, 2016

gitlab下载

由于直接从官方渠道下载会遭遇被墙的情况,因此,先更换成中国镜像,再进行下载安装

参照gitlab中国镜像下载

安装完成后运行下面命令,配置gitlab

gitlab-ctl reconfigure

gitlab服务

开启gitlab服务


gitlab-ctl start

停止gitlab服务


gitlab-ctl stop

重启gitlab服务

gitlab-ctl restart

开启rails控制台

gitlab-rails console

配置gitlab服务

首先需要修改gitlab的external_url,external_url是gitlab默认仓库的host地址,我们需要将其改成外网可以访问的地址,如ip


vim /etc/gitlab/gitlab.rb


external_url 'http://121.201.63.89'

接着,我们需要配置一下smtp服务器,同样在gitlab.rb


# 配置smtp服务器信息
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxuser@163.com"
gitlab_rails['smtp_password'] = "xxpassword"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = :login
gitlab_rails['smtp_enable_starttls_auto'] = true

# 配置发送人信息
gitlab_rails['gitlab_email_from'] = "xxuser@163.com"
user["git_user_email"] = "xxuser@163.com"

gitlab读取最新更改配置

gitlab-ctl reconfigure

配置gitlab-ci

添加.gitlab-ci.yml 到项目下

配置gitlab-ci runner

gitlab-ci runner是负责运行ci测试的服务, runner可以执行多个项目的ci测试

首先需要先安装gitlab-ci runner

runner 有许多种形式,这里我们使用了docker的形式运行,使用docker运行有几点好处,一是不用再runner环境下配置ruby运行需要的所有依赖库,降低了配置的难度,同时也避免了由于操作系统,源等差异带来的版本冲突问题

参照Install as Docker Service

note

如果遇到
```
ERROR: Build failed with: Get http://unix.sock/v1.18/version: dial unix /var/run/docker.sock: no such file or directory


这是因为没有把docker.sock挂载到容器里,导致无法拉取镜像

这时,run gitlab-runner容器时,需要指定挂载docker.sock

docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest



#### 配置.gitlab-ci.yml

```yaml

# 主镜像
image: docker.baozou.com/baozou/dashijian:base
services:
  # 依赖的镜像
  - mysql:latest
# 环境变量
variables:
  # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: action_cabel
  MYSQL_ROOT_PASSWORD: '63292590'

test:
  script:
    # 拉取子模块
    - git submodule update --init
    # 在gitlab docker runner中/cache是会被挂在容器外面的地方,将bundle下来的gem包安装在这个地方,能避免test每次bundle的时候都重新拉下完整的gem
    - bundle install --path=/cache
    - RAILS_ENV=test DB_HOST=mysql DB_NAME=action_cable bundle exec rake db:drop
    - RAILS_ENV=test DB_HOST=mysql DB_NAME=action_cable bundle exec rake db:create
    - RAILS_ENV=test DB_HOST=mysql DB_NAME=action_cable bundle exec rake db:migrate
    - RAILS_ENV=test DB_HOST=mysql DB_NAME=action_cable bundle exec rake test
  tags:
    - docker-test