使用gitlab和gitlab-runner实现项目多服务器自动同步

使用gitlab和gitlab-runner实现项目多服务器自动同步

本人创建了4台ubuntu(16.04.3 LTS)虚拟机,其中一台单独作为gitlab服务器,其余的作为server服务器

一. 首先部署一台gitlab服务器, 以ubuntu系统为例(其他系统可参考此链接)

1. 安装并配置必要的依赖关系
如果你想使用 Postfix 发送邮件,请在安装过程中根据提示选择 ‘Internet Site’。 你也可以用 Sendmail 或者 配置一个自定义的 SMTP 服务 并 把它作为一个 SMTP 服务器。
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
2.添加 GitLab 镜像源并安装
curl -sS http://packages.gitlab.com.cn/install/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce
如果没有外网 可以先下载对应的安装包然后再(.deb是ubuntu的安装包格式)
dpkg -i gitlab-ce-XXX.deb
3.配置并启动 GitLab
sudo gitlab-ctl reconfigure
4.通过浏览器访问上一步配置的域名
第一次访问 GitLab,系统会重定向 url 到重置密码的页面,你需要输入初始化管理员账号的密码。 设置完成后,系统会重定向到登录界面,你就可以使用刚才输入的密码登录系统了。
系统默认的管理员账号为 root, 登录系统后,你可以修改管理员账号为自己喜欢的账号。
可以在 /var/opt/gitlab/nginx/conf中的gitlab-http.conf的配置指定的域名给gitlab服务器
在 /etc/gitlab/gitlab.rb文件中修改gitlab的域名(此处的修改为[email protected]的地址 建议和gitlab-http.conf中的server 一致)
external_url 'http://www.xxx.com'
可使用
gitlab-ctl stop|start|restart #管理gitlab服务器 
至此gitlab服务器已搭建完毕

二. 搭建gitlab-runner(以ubuntu 16.04.3 LTS)为例

因gitlab占用内存过高,外加本人电脑配置只有8G内存,所以就将gitlab-runner安装在了其中一台服务器中
1.添加GitLab的官方存储库:
curl -L
https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
2.安装gitlab-runner(默认最新版),也可安装指定版本
sudo apt-get install gitlab-runner #默认最新版
sudo apt-get install gitlab-runner=10.0.0 #安装指定版本
3.安装完成后就该注册gitlab-runner(此处可以理解为拿到营业执照)
1)开启注册
sudo gitlab-runner register
2)输入gitlab服务器的URL,获取gitlab服务器地址和令牌(token),使用root账号登录的你gitlab服务器,然后访问 http://xxx.xxx.com/admin/runners,其中xxx.xxx.com是你的gitlab服务器地址,进入页面后你将会看到

使用gitlab和gitlab-runner实现项目多服务器自动同步_第1张图片

第一个红色的部分就是 url
第二个红色的部分就是token(令牌)
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com #此处填写的第一条红色的部分
3)输入您获得的注册Runner的令牌:
Please enter the gitlab-ci token for this runner
xxx #此处XXX填入第二条获取的token
4)输入跑步者的描述,你可以稍后在GitLab的UI中进行更改:
Please enter the gitlab-ci description for this runner
[hostame] my-runner #随意 可在gitlab服务器UI中进行修改
5)输入与Runner关联的标签,稍后可以在GitLab的用户界面中进行更改:
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag #随意 可在gitlab服务器UI中进行修改
6)选择Runner是否应该选择没有标签的作业,可以稍后在GitLab的UI中进行更改(默认为false):
Whether to run untagged jobs [true/false]:
[false]: true
7)选择是否将Runner锁定到当前项目,稍后可以在GitLab的UI中进行更改。Runner特定时有用(默认为true):
Whether to lock Runner to current project [true/false]:
[true]: true
8)输入Runner执行者:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell #本人选择的是shell
至此 gitlab-runner配置完成

三.配置服务器之间的ssh登录

1.本人三台服务器的ip分别是:
192.168.56.101,
192.168.56.102,
192.168.56.104
gitlab服务器的ip是:
192.168.56.103
gitlab-runner安装的服务器为102(后面用102来代替对应的服务器)
因为gitlab-runner部署的服务器是102所以要建立 gitlab-runner用户与101,102和104之间的root ssh免密码登录
为什么是gitlab-runner用户呢 因为执行同步代码的脚本是gitlab-runner用户
1.先在102服务器切换gitlab-runner用户
su gitlab-runner
2.使用ssh-keygen -t rsa生成ssh的公钥和私钥
ssh-keygen -t rsa #回车之后3次回车即可
你就会在 /home/gitlab-runner/.ssh目录下发现2个文件
id_rsa.pub 和id_rsa
3.然后再切换到root用户,重复上述操作,这样 root用户的ssh的公钥和私钥也生成了,接下来就是将gitlab-runner用户的公钥写入root用户的authorized_keys文件中
cat /home/gitlab-runner/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
4.重启ssh service ssh restart
5.先切换到gitlab-runner用户 su gitlab-runnner
6.使用ssh登录root用户 ssh [email protected]
你会发现你已经切换到了root用户了
7.101和104的服务器的root的ssh同理,只需要将102服务器的中/home/gitlab-runner/.ssh/id_rsa.pub的内容分别写入 101和104/root/.ssh/authorized_keys中即可
重启101和104服务器的ssh服务service ssh restart
然后就可以使用102的gitlab用户
ssh root@192.168.56.104
ssh root@192.168.56.101
注意 第一次连接会提示yes/no, 输入yes即可

四.创建项目,并且创建一个.gitlab-ci.yml文件

例如
stages:
  - build_product

build_product:
  stage: build_product
  only:
      - master
  script:
    - /www/auto.sh
其中的 auto.sh是shell脚本,用来ssh登录服务器然后实现项目代码同步
示例代码如下
#!/bin/bash
ssh root@192.168.56.102 << ssh102
cd /www/haochi
git pull origin master
ssh102

#101
ssh root@192.168.56.101 << ssh101
cd /www/haochi
git pull origin master;
ssh101

#104
ssh root@192.168.56.104 << ssh104
cd /www/haochi
git pull origin master;
ssh104
至此 一套完整的gitlab+gitlab-runner自动化项目项目部署就完成啦

你可能感兴趣的:(gitlab)