GitLab-CI Server 安装配置

作者 huhamhire,暂无评论,2014年2月18日 18:31 折腾历程

前一篇文章已经介绍了 GitLab 服务器的安装过程。如果后续还有进一步的 CI 需求,GitLab 也提供了 GitLab-CI 工具,来配合 GitLab 实现简单的自动化测试、持续集成的任务。这一篇就来简要介绍一下 GitLab-CI 服务器的安装配置。

理论上 GitLab Server 可以与 GitLab Server 安装在同一台服务器上,不过因为我用了虚拟机,并且从长期运行可靠性以及安全性的角度来考虑,建议还是将 GitLab 服务器与 GitLab-CI 服务器分开部署。

文中使用的 GitLab-CI 版本为 4.2.2-stable。同上回一样,操作系统依旧为安装在虚拟机上的 Debian Wheezy 7.4。此外,本文中也提供了 GitLab-CI 服务器的 HTTPS 访问设置方案。

在之前使用虚拟机部署 GitLab-CI Server,并按照前一篇文章中的流程在做完准备工作后有快照的情况下,可以直接使用该快照来开始 GitLab-CI Server 的配置,请直接跳至本文第三部分。
另外,GitLab 官方提供了详尽的安装配置流程,可以访问 https://gitlab.com/gitlab-org/gitlab-ci/blob/master/doc/install/installation.md 获取相关内容。

1. 安装依赖软件包

开始前先检查一下软件包更新:


sudo apt-get update
sudo apt-get upgrade

安装需要使用的软件包:


sudo apt-get install -y wget curl gcc checkinstall libxml2-dev \
libxslt-dev libcurl4-openssl-dev libreadline6-dev libc6-dev \
libssl-dev libmysql++-dev make build-essential zlib1g-dev \
openssh-server git-core libyaml-dev libpq-dev libicu-dev \
redis-server

GitLab-CI 并没有特别说明依赖 git 的特定版本,全新安装的话,直接使用系统软件源提供的 git-core 包即可。

2. 安装 Ruby

与安装 GitLab Server 一样,安装 GitLab-CI Server 同样需要自行编译 Ruby。过程同前一篇文章中的一致。


mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz
cd ruby-2.0.0-p353
./configure --disable-install-rdoc
make
sudo make install

编译安装完成后,国内环境依旧建议将默认的 gem source 改为淘宝镜像:


gem source -r https://rubygems.org/
gem source -a http://ruby.taobao.org/

安装 Bundler:


sudo gem install bundler --no-ri --no-rdoc

3. 添加 GitLab CI 用户

创建用于安装 GitLab-CI Server 的系统用户:


sudo adduser --disabled-login --gecos 'GitLab CI' gitlab_ci

4. 数据库安装配置(MySQL)

GitLab-CI 在官方说明中提到了对 PostgreSQL 与 MySQL 的支持。我原本准备为了和之前的 GitLab Server 保持一致,都使用 PostgreSQL 作为默认的数据库,不过在实际使用 PostgreSQL 部署的过程中,按照官方流程操作,每次在初始化数据库表的时都遇到的权限问题。所以,最终我还是选择了使用 MySQL 来作为 GitLab Server 的数据库。

虽然 GitLab-CI 需要使用 GitLab 中的部分数据,甚至是使用 GitLab 的账号来登录进行操作,但是 GitLab-CI 仍需要配置单独的数据库。下面开始数据库的配置流程。

首先安装 MySQL 软件包:


sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

在安装过程中设置 MySQL 的 root 用户密码。

登录 MySQL 进行初始设置:


mysql -u root -p

创建 GitLab-CI 生产部署需使用的数据库:


CREATE DATABASE IF NOT EXISTS `gitlab_ci_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

创建 GitLab-CI 的数据库用户,并设置密码:


CREATE USER 'gitlab_ci'@'localhost' IDENTIFIED BY 'password';

为 GitLab-CI 用户赋予数据库的权限:

System Message: ERROR/3 (<string>, line 113)

Content block expected for the "code" directive; none found.


.. code:: mysql

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON gitlab_ci_production.* TO 'gitlab_ci'@'localhost';

退出 MySQL 控制台:


exit;

5. 获取 GitLab-CI 源代码

获取 GitLab-CI 的源代码,并且切换到最新的发布版本分支:


cd /home/gitlab_ci/
sudo -u gitlab_ci -H git clone https://gitlab.com/gitlab-org/gitlab-ci.git
cd gitlab-ci
sudo -u gitlab_ci -H git checkout 4-2-stable

6. 安装 GitLab-CI 服务器

6.1 设置 GitLab-CI 服务器

复制 GitLab-CI 服务器的模板配置文件:


sudo -u gitlab_ci -H cp config/application.yml.example config/application.yml
sudo -u gitlab_ci -H editor config/application.yml

GitLab-CI 服务器的配置可以参考下面的部分,这里给出的是针对 SSL 方式访问时需要做的修改。注意 GitLab-CI 使用 GitLab 服务器的用户名及账户进行操作,所以务必设置正确的 GitLab 服务器访问链接。


1 allowed_gitlab_urls:
2   'https://gitlab.huhamhire.com/'
3 gitlab_ci:
4   host: gitlab-ci.huhamhire.com
5   port: 443
6   https: true
7   email_from: gitlab-ci@huhamhire.com
8   support_mail: gitlab-ci@huhamhire.com

复制 Web 服务器模板配置文件,并进行适当配置:


sudo -u gitlab_ci -H cp config/puma.rb.example config/puma.rb
sudo -u gitlab_ci -H editor config/puma.rb

建立 pids/sockets 目录,并设置 gitlab_ci 用户访问权限:


sudo -u gitlab_ci -H mkdir -p tmp/sockets/
sudo chmod -R u+rwX  tmp/sockets/
sudo -u gitlab_ci -H mkdir -p tmp/pids/
sudo chmod -R u+rwX  tmp/pids/

6.2 安装 Gem 包

编辑 Gem 文件:


sudo -u gitlab_ci -H editor Gemfile

修改 Gem 源的镜像服务器为淘宝镜像:


source "http://ruby.taobao.org/"

接下来,安装 Gitlab-CI 的 Gem 包,注意因为使用了 MySQL 数据库,这里的参数应该有“–without postgres”的配置:


sudo -u gitlab_ci -H bundle install --without development test postgres --deployment

6.3 数据库设置

复制默认的数据库模板配置文件:


sudo -u gitlab_ci -H cp config/database.yml.mysql config/database.yml

修改配置文件中的用户名及密码:


sudo -u gitlab_ci -H editor config/database.yml

初始化数据库及数据库表:


sudo -u gitlab_ci -H bundle exec rake db:setup RAILS_ENV=production

初始化配置计划任务:


sudo -u gitlab_ci -H bundle exec whenever -w RAILS_ENV=production

7 安装 GitLab-CI 服务器启动脚本

复制默认的 Gitlab-CI 启动脚本到系统目录:


sudo cp /home/gitlab_ci/gitlab-ci/lib/support/init.d/gitlab_ci /etc/init.d/gitlab_ci

设置启动脚本权限:


sudo chmod +x /etc/init.d/gitlab_ci

设置 Gitlab-CI 自动启动:


sudo update-rc.d gitlab_ci defaults 21

启动 Gitlab-CI 服务:


sudo service gitlab_ci start

8. Nginx 服务器安装配置

安装 nginx 软件包:


sudo apt-get install -y nginx

复制用于 GitLab-CI 服务器的 nginx 模板配置文件,并建立软链接:


sudo cp /home/gitlab_ci/gitlab-ci/lib/support/nginx/gitlab_ci /etc/nginx/sites-available/gitlab_ci
sudo ln -s /etc/nginx/sites-available/gitlab_ci /etc/nginx/sites-enabled/gitlab_ci

修改配置文件:


sudo editor /etc/nginx/sites-enabled/gitlab_ci

如果只用于 HTTP 访问,则只是在 nginx 的配置文件中设置服务器 IP 或是站点的域名即可。如果需要通过 HTTPS 方式访问,可以参考下面的两段设置来配置。


 1 server {
 2   listen *:80 default_server;
 3   server_name gitlab-ci.huhamhire.com;
 4   server_tokens off;
 5   root /nowhere;
 6   rewrite ^ https://$server_name$request_uri permanent;
 7 }
 8 
 9 server {
10   listen *:443 default_server;         # e.g., listen 192.168.1.1:80;
11   server_name gitlab-ci.huhamhire.com;     # e.g., server_name source.example.com;
12   server_tokens off;
13   root /home/gitlab_ci/gitlab-ci/public;
14 
15   ssl                     on;
16   ssl_certificate         /etc/nginx/ssl/ssl_nginx.crt;
17   ssl_certificate_key     /etc/nginx/ssl/ssl_decrypted.key;
18   ssl_protocols           SSLv3 TLSv1 TLSv1.2;
19   ssl_ciphers             AES:HIGH:!ADH:!MD5;
20   ssl_prefer_server_ciphers on;
21 
22   access_log  /var/log/nginx/gitlab_ci_access.log;
23   error_log   /var/log/nginx/gitlab_ci_error.log;
24 
25   location / {
26     try_files $uri $uri/index.html $uri.html @gitlab_ci;
27   }
28 
29   location @gitlab_ci {
30     proxy_read_timeout 300;
31     proxy_connect_timeout 300;
32     proxy_redirect     off;
33 
34     proxy_set_header   X-Forwarded-Proto $scheme;
35     proxy_set_header   X-Forwarded-Ssl   on;
36     proxy_set_header   Host              $http_host;
37     proxy_set_header   X-Real-IP         $remote_addr;
38 
39     proxy_pass http://gitlab_ci;
40   }
41 
42   # adjust this to match the largest build log your runners might submit,
43   # set to 0 to disable limit
44   client_max_body_size 10m;
45 }

上面的配置中已经将默认的 80 端口请求自动重新指向至 443 端口。

另外,我在 GitLab-CI 服务器上依旧使用了 StartSSL 签发的证书。这里的证书链配置与 GitLab 服务器的配置过程相同。为配合私钥使用,需要将域名对应的证书置于第一位,后面的证书理论上是无所谓顺序的,建议按照“签发的域名证书 >> CA 根证书 >> CA 服务器证书”的顺序来组合。

配置完成后,自检一遍 nginx 配置:


sudo nginx -t

重启 nginx 服务:


sudo /etc/init.d/nginx restart

进行完 nginx 配置后,建议在系统 hosts 文件中添加 GitLab 服务器,以及 GitLab-CI 服务器的 IP 地址。


sudo editor /etc/hosts
GitLab-CI 服务器到此就配置完成了,不过如果需要让整个 CI 系统运行起来,按照预先编制的脚本进行编译、测试、集成,还需单独安装 GitLab-CI Runner 并添加到 GitLab-CI 服务器中。下一篇文章将介绍 GitLab-CI Runner 的安装。
gitlab-ci_01 gitlab-ci_02
关键词:git , GitLab , GitLab-CI
登录后进行评论