安装gitlab

官方文档
最低需要2G内存
安装依赖,需要开启ssh服务,开放ssh和http端口
yum install -y curl policycoreutils-python openssh-server openssh-clients
需要发邮件,postfix一般是阻止的,所以用腾讯企业邮箱
使用清华的yum源
vi /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

开始安装,安装后需要很久配置完成
EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce
配置SMTP发送邮件,文档
gitlab-ctl stop
vi /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
gitlab-ctl start
打开链接登陆,设定root密码

常用配置

修改ssh默认端口,先修改sshd服务端口,然后停止服务,修改默认配置文件,reconfigure,开启服务
gitlab_rails['gitlab_shell_ssh_port'] = 新端口
不使用默认的nginx,配置步骤同上,文档
禁用自带的nginx
nginx['enable'] = false
配置外部webserver的用户名,其实是将gitlab的用户加入www组
web_server['external_users'] = ['www']
下载nginx配置文件
定时备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

CI流程

安装gitlab-runner文档
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner
注册runner
gitlab-runner register
运行runner
gitlab-runner start

编写CI脚本

web界面配置项目的deploy key可以在脚本中免密码登陆
服务是以gitlab-runner身份运行的,它是个普通用户,如果需要root权限,需要加入sudo文件
shell脚本
web文件通常是www用户,需要将gitlab-runner用户加入www用户组
usermod -a -G www gitlab-runner
再用sudo给权限
sudo chmod g+w -R /home/wwwroot/default
nginx中设置默认root为current
每次部署,根据时间新建一个目录,将最新的代码克隆到该目录
安装一些依赖,迁移数据库后,将环境变量和存储目录链接到以前的,重置权限
sudo chown -R www:www .
最后将current目录链接到创建的最新部署目录,这样实现了秒切换

配置gitlab-ci.yml

项目根目录加入.gitlab-ci.yml文件
文件使用yaml语法,可以用井号注释,比json强一点,语法也是很简单
只能用空格缩进,冒号后要加空格,-后加空格表示数组,缩进表示层级关系。
only和except表示分支,tags表示特定的标签,when给设定脚本执行时间
文档,示例

定时备份

保留最近7天
gitlab_rails['backup_keep_time'] =604800
crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

遇到的问题

ssh_exchange_identification
/etc/hosts.allow中加入sshd: ALL
sudo: sorry, you must have a tty to run sudo
Defaults:myuser !requiretty