缘由
买服务器有些日子了,都是用ftp来上传项目文件;也有用过git二次上传(即先上传到服务器库里,然后再到服务器的项目地址里git pull拉代码),知道这种方式很麻烦,试过githook自动部署,在网上找资料,没有成功过;应该是自己太笨,不然别人怎么可以成功呢?然后就一直搁着了;
昨天,朋友说要用服务器,我就说用我的,但是如果每次都要通过我上次代码,或者部署代码不是很麻烦,于是,就又捡起了怎么能自动部署这个想法。今天一天基本上都是在搞这个事情,头都是大的,幸好,皇天不负有心人,终于搞定了,因此有此一记;
环境
- centos 6.8
- nginx
- git
- gitlab
安装gitlab
nginx和git的安装就不说了,网上很多,我的另一篇文章中也有,可参考;
安装HTTP 和 SSH
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
安装Postfix邮件服务器
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
安装gitlab包
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
设置gitlab服务器地址
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee
Nginx反向代理gitlab
gitlab配置文件
打开gitlab的配置文件,在 /etc/gitlab/gitlab.rb中;
找到 #nginx['listen_port'] = nil
去掉前面的 # ,然后更改端口号为8099
重载gitlab配置文件
gitlab-ctl reconfigure
Nginx配置文件
打开自己安装的Nginx配置文件,在/etc/nginx/nginx.conf中;
增加如下命令:
server {
listen 80;
server_name gitlab.example.com;
location / {
# 这个大小的设置非常重要,如果 git 版本库里面有大文件,设置的太小,文件push 会失败,根据情况调整
client_max_body_size 50;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到 gitlab 内置的 nginx
proxy_pass http://gitlab.example.com:8099;
}
}
重启Nginx服务器
nginx -s reload
打开浏览器,登录;
自动部署
安装gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
yum install gitlab-ci-multi-runner
注册runner
gitlab-ci-multi-runner register
#引导会让你输入gitlab的url,输入自己的url,例如http://gitlab.example.com/
#引导会让你输入token,去相应的项目下找到token,例如ase12c235qazd32
#引导会让你输入tag,一个项目可能有多个runner,是根据tag来区别runner的,输入若干个就好了,比如shell
#引导会让你输入executor,这个是要用什么方式来执行脚本,图方便输入shell就好了
这里token怎么寻找?Admin area => Overview => Runners

做完上面的以后,刷新,如下图就成功了

配置.gitlab.yml文件
首先,在gitlab服务器上,创建项目,然后将项目克隆到本地;接着在本地的根目录下,新建.gitlab.yml文件;添加如下代码
stages:
- deploy
deploy:
stage: deploy
script:
- mkdir -p /var/www/gitlab/myApp
- git --work-tree=/var/www/gitlab/myApp checkout -f
only:
- master
tags:
- shell
參考GitLab官方資料,這裡最重要的就script;
设置权限
在服务器上创建/var/www/gitlab文件夹,并设置这个文件夹的用户组为gitlab-runner:gitlab-runner
chown -hR gitlab-runner:gitlab-runner /var/www/gitlab
然后提交代码:
git add .gitlab.yml
git commit -am 'add .gitlab.yml'
git push
最后,在服务器上的/var/www/myAPP里就自动部署了代码;
网友评论