版本控制系统是DevOps流程和持续交付流水线中关键的一环。 版本控制系统是研发团队开发环境的中心,开发人员和运维人员开发软件产品的代码、配置以及基础设施配置管理都要保存在其中。

我们选择在内网开发环境部署GitLab社区版作为团队的版本控制系统,一切皆代码,开发和运维人员将共同使用这个系统。

1.环境

  • CentOS 7.3 192.168.61.100
  • GitLab 9.1

2.安装GitLab CE

使用GitLab官方提供的GitLab-CE Omnibus安装包:

1curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
2
3yum clean all
4yum make cachefast
5yum install gitlab-ce

3.初始化配置

在初始化和启动前根据服务器的具体情况做一些配置:

3.1 Git数据存储目录

配置Git数据存储目录,Git数据默认保存在/var/opt/gitlab/git-data中,可修改/etc/gitlab/gitlab.rb中的git_data_dir修改到别的路径下,例如这里修改到/home/git-data下:

1mkdir -p /home/gitlab/git-data

修改/etc/gitlab/gitlab.rb

1git_data_dirs({ "default" => { "path" => "/home/gitlab/git-data" } })

3.2 配置外部访问URL

/etc/gitlab/gitlab.rb

1external_url "http://gitlab.example.com"

最好以域名的形式配置,如果没有可以配置IP

3.3 初始化配置和启动

初始化配置和启动GitLab:

1gitlab-ctl reconfigure

在浏览器中访问:http://192.168.61.100,初次打开页面需要设置root用户密码,之后登录即可。

4.GitLab各组件

采用Omnibus package包并安装,GitLab各个组件全部自动安装完成。

我们主要关注以下组件:

  • nginx: 静态Web服务器
  • unicorn: GitLab应用服务器。
  • gitlab-workhorse: 轻量级反向代理服务器,主要用来处理一些大的HTTP请求,例如文件上传下载,git push pull等。其他的HTTP请求会反向代理给unicorn。
  • postgresql: 数据库
  • redis: 缓存
  • sidekiq:后台异步任务队列

对这些组件更多的定制配置可以参考这里 例如,数据库可以配置外部单独的PostgreSQL而不使用Omnibus GitLab包自带安装的。

5.服务的启动和停止

1# 启动
2gitlab-ctl start
3 
4# 停止
5gitlab-ctl stop
6 
7# 重启
8gitlab-ctl restart

备注:

  • 可以使用gitlab-rake gitlab:check命令检查安装状态,有问题的地方可以根据提示修复
  • 可以使用cat /opt/gitlab/embedded/service/gitlab-rails/VERSION查看安装的GitLab版本

6.gitlab常用配置

6.1 关闭注册

用管理员root账号登录之后, 进入Admin area, 点settings, 取消Signup enabled.

6.2 禁止普通用户创建Group

1gitlab_rails['gitlab_default_can_create_group'] = false
1gitlab-ctl reconfigure

6.3 通知邮箱配置

以163邮箱为例:

1gitlab_rails['smtp_enable'] = true
2gitlab_rails['smtp_address'] = "smtp.163.com"
3gitlab_rails['smtp_port'] = 25
4gitlab_rails['smtp_user_name'] = "[email protected]"
5gitlab_rails['smtp_password'] = "xxxpwd"
6gitlab_rails['smtp_domain'] = "163.com"
7gitlab_rails['smtp_authentication'] = "login"
8gitlab_rails['smtp_enable_starttls_auto'] = true
9gitlab_rails['gitlab_email_from'] = "[email protected]"
1gitlab-ctl reconfigure

测试邮件发送:

1gitlab-rails console
2irb(main):001:0> Notify.test_email('[email protected]', '[GITLAB]TEST', 'MSG').deliver_now

7.认证集成LDAP

我们已经部署了一个OpenLDAP服务。 我们希望团队所有系统的账户都使用LDAP认证,使用统一帐户登录。

修改 /etc/gitlab/gitlab.rb文件,搜索ldap,去掉注释,并根据官方文档做出如下配置:

 1gitlab_rails['ldap_enabled'] = true
 2gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close this block with 'EOS' below
 3   main: # 'main' is the GitLab 'provider ID' of this LDAP server
 4     label: 'LDAP'
 5     host: '192.168.61.100'
 6     port: 389
 7     uid: 'uid'
 8     method: 'plain' # "tls" or "ssl" or "plain"
 9     bind_dn: 'cn=Manager,dc=frognew,dc=com'
10     password: '{SSHA}krOGXDmiCdSXuXocOf10F96LJO5ijdXo'
11     active_directory: true
12     allow_username_or_email_login: true
13     block_auto_created_users: false
14     base: 'dc=frognew,dc=com'
15     user_filter: ''
16     attributes:
17      username: ['uid', 'userid', 'sAMAccountName']
18      email:    ['mail', 'email', 'userPrincipalName']
19      name:       'cn'
20      first_name: 'givenName'
21      last_name:  'sn'
22EOS

重新配置gitlab:

1gitlab-ctl reconfigure

开启LDAP登录后,可以在Admin area, 点settings, 取消Signin enabled关闭普通的账号密码登录。 另外需要注意在关闭普通的账号密码登录之前需要设置一个LDAP用户为超级管理员。

8.备份

使用gitlab-rake gitlab:backup:create命令即可完成备份,默认的备份文件存放在/var/opt/gitlab/backups下。

通过修改/etc/gitlab/gitlab.rb来修改备份文件的默认存放目录:

1gitlab_rails['backup_path'] = '/homme/backup/gitlab'

重新配置gitlab:

1chown git /homme/backup/gitlab
2gitlab-ctl reconfigure

9.监控

以Omnibus GitLab package形式安装的gitlab默认开启了Prometheus监控和其所需的Exporter。 具体可以参考这里GitLab Prometheus

可修改/etc/gitlab/gitlab.rb禁用gitlab内置的Prometheus:

1prometheus_monitoring['enable'] = false
1gitlab-ctl reconfigure

参考