背景环境
环境 | 版本 | 备注 |
---|---|---|
windows | 10 | |
vagrant | 2.0 | 这玩意儿做开发时挺好玩,可以单独写一篇博文 |
CentOS | 7.2 |
早前我用的是 Gitlab 中的 WebHooks 解决解决发布的问题,但是需要自己搭建很多东西还要专门为此写脚本,在研究 Gitlab 中发现原来早就帮我们做好这些事情,只是没有发现而已
Gitlab-CI 简介
Gitlab-CI 顾名思义就是配合gitlab使用的一套可持续集成系统 (Continuous Integrations) ,8.0以后内部集成并默认开启。
Gitlab-Runner 简介
Gitlab-Runner 是配合 Gitlab-CI 的一套工具,Gitlab-CI 负责项目的构建任务调度,Gitlab-Runner 负责具体的脚本任务执行
两者之间的关系和区别
Pipline
- pipline 在分支版本根目录的 .gitlab-ci.yml 文件中定义
- 版本的每一次更新 即 commit 或 merge 行为都会触发 pipline
- 一次pipline的执行相当于一次构建任务
- 构建任务包含 安装依赖、单元测试、编译、打包、部署到服务器等行为
Stages
- 一个pipline 有多个 阶段(stage)这些阶段是
串行执行
的,比如 build -> test -> deploy - 默认任何一个阶段执行失败或异常整个pipline即中断
Jobs
- 每一个阶段(stage)都包含多个 任务(job)
- 这些任务是
并行执行
的 - 所有 job 成功执行 这个 stage 才算是成功执行,换言之如果job失败了那么stage失败即pipline失败
他们之间的关系,如图所示
在宿主机上安装 Gitlab-Runner
宿主机不一定是生产服务器,我们可以在伺服上配置 Gitlab-Runner 让 Runner 完成所有的构建任务后发布代码到目标服务器。由于我这边做的是PHP开发没有编译、打包等过程,直接拉去代码等简单操作即可,所以将 gitlab-runner 部署在目标服务器上了。
以下是本人安装以及配置的过程,全程以root身份安装和配置
# CentOS 7
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# 安装
yum install -y gitlab-runner
# 如果提示出现错误
# Delta RPMs disabled because /usr/bin/applydeltarpm not installed. yum install deltarpm
# 另外如果出现 No Presto metadata available for base. 的话 try yum provides '*/applydeltarpm' 然后 yum install deltarpm
# 注册宿主runner
gitlab-runner register
# 启动
systemctl start gitlab-runner.service
# 填写注册信息
url
token
description # 描述
tags # 如果填写 tag 那么 yaml 配置文件必须制定了tag才能使用这个runner
executor # 执行容器 一般为 shell
# 如果默认用 root 用户 register 那么 配置文件在 /etc/gitlab-runner/config.toml
# 如果是其他用户 register 配置文件在 ~/.gitlab-runner/config.toml
全程以 root 身份操作是不推荐的
gitlab-runner register
后的配置文件是写入 /etc/gitlab-runner/config.toml
中的,Gitlab-Runner
的是以 gitlab-runner
身份运行的,而我的 Nginx
和 PHP-fpm
是以 www:www
身份运行的,web 的目录也是 www:www
这样会出现权限问题,并且通过组和其他方式都不能完美解决问题,不如直接用 www
身份执行部署任务。
注册后 runner
后的配置文件存放在 ~/.gitlab-runner/config.toml
简单的前台调试用www运行gitlab-runner
# 前台运行
gitlab-runner run -u www # 以 www 身份运行
使用 www 身份后台执行 gitlab-runner 服务
# 后台执行
# gitlab-runner 有 install、uninstall、start、stop、restart、status
# 这6个命令就是和服务相关的
# 停止服务
systemctl stop gitlab-runner.service
# 卸载旧有的服务包括 root 创建的 runner 服务
gitlab-runner uninstall -n gitlab-runner
# 用www身份安装服务
gitlab-runner install -u www -d /home/www -c "/home/www/.gitlab-runner/config.toml"
# -u 运行身份
# -d 构建时的工作目录
# -c register 后的配置文件存放路径
# 运行服务 便是 www 身份
gitlab-runner start
# 查看
ps aux | grep gitlab-runner
# root 4431 0.4 2.1 55804 13488 ? Ssl 15:31 0:00
# /usr/bin/gitlab-runner run
# --working-directory /home/vagrant
# --config /etc/gitlab-runner/config.toml
# --service gitlab-runner
# --syslog
# --user www
.gitlab-ci.yml 文件的配置
关于 yaml (Yet Another Markup Language) 具体请 Search 一下
# .gitlab-ci.yml
# 阶段,串行执行,失败则终止执行
stages:
- deploy
# 具体任务,必须指定 阶段(stage)
# 并列执行,只有全部成功执行该 stage 才会进入下个阶段
publish:
stage: deploy
tags: # register 时绑定的 tags
- dinglc_wap_test
only: # 特定版本分支才会执行
- develop
- master
script: # 具体执行的脚本,串行执行,失败则终止
- whoami
- bash /webservice/shell.sh