背景

服务和服务器开始多起来了,一个个搞效率太低,所以准备用持续集成来提高效率

原理

gitlab-ci与ci-runner的关系

push到gitlab之后,触发GitLab-CI,GitLab-CI根据注册信息依次让GitLab-Runner执行对应的任务

步骤

  • Step 0:GitLab-CI是gitlab自带的,无需额外安装
  • Step 1:安装GitLab-Runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # 添加源
sudo apt-get install gitlab-runner # ubuntu

  • Step 2: 注册runner,在此之前需要准备token,根据如下的官网提示操作(我这里选择了shared runner,需要管理员权限)
  • 注册成功后长这样
  • 关于注册runner的tips:

    • 注意 tag可以有多个,各 tag之间用逗号隔开。如果你使用了多个 tag,那么当你想用这个 Runner时,在.gitlab-ci.yml的 tag字段里也必须明确指明这些 tags
    • 如果你选择Docker作为Runner的executor,你还要选择默认的docker image来运行job(当然,你也可以在.gitlab-ci.yml里指明你需要用的image)
    • 注册完成后你可以在/etc/gitlab-runner里发现config.toml文件,该文件是Runner的配置文件
  • Step 3:启动runner
    • 直接启动:
sudo gitlab-runner run

  • 启动为服务:
sudo gitlab-runner install -n "<service-name>" -u <user-name>
sudo gitlab-runner start -n "<service-name>"

user-name就是运行该命令的用户,必须指定,否者会报如下的错误,建议用一个单独的用户(比如:gitlab-runner)进行隔离

启动之后,用service命令check服务运行状态

  • Step 4:配置ci任务

    • 任务:将一个thrift服务每次push之后进行自动部署
    • 编写:部署脚本
#!/bin/bash
if [ $# -ne 2 ]; thenecho "arguments error!<repo-name> and <deploy-path> were required"echo "example $0 gitlab-username/repo-name /deploy/path/"exit 1
elsedeploy_path=$2if [ ! -d "$deploy_path" ]; thenproject_path="git@git.shengtang.ai:"$1".git"git clone $project_path $deploy_pathelsecd $deploy_path && git pullfisupervisorctl restart service-name
fi

  • 关于如何使用supervisor部署服务,可以参看:

CZMan95:【环境搭建】Supervisor for Linux实操​zhuanlan.zhihu.com

  • 编写.gitlab-ci.yml: 在项目的根目录下添加.gitlab-ci.yml内容如下:
stages:- deploy
deploy:stage: deployscript:- ~/scripts/gitlab-runner/script.sh gitlab-user/repo-name /deploy/path/only:- master # 只有在mash push的时候才会触发部署tags:- global # gitlab-runner的tag,可以用来区分不同机器上的runner

  • push上去之后就会自动执行第一次任务,可以在gitlab的对应项目下的piplines中看到(注意:如果名字写的不对的话:如写成了.gitlab-ci.yaml的话是看不到任务的,我因为这个问题找了好久的bug(有的地方说可以用yaml,但是我这里是不可以的)
  • Step 5:多台机器部署

    • 方案一:利用上面提到的tag,进行多台机器的部署,但是这里有个问题是:一旦有bug,所有的机器都会同时挂掉,即便没有bug,所有机器同时restart也是个问题
    • 方案二(推荐):runner只在一台机器上,其它机器通过ssh命令进行触发(需要配置免密登录),该方法还能自己控制替换的步骤(这对于需要灰度的系统非常重要)

参考资料

gitlab-runner官网:https://docs.gitlab.com/runner/

关于runner的跟多细节:https://www.jianshu.com/p/19fe0ce7ecec

gitlab 目录tag_【环境搭建】gitlab-ci(持续集成)相关推荐

  1. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

  2. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  3. 在CentOS7上安装Drone搭建CI持续集成环境

    文章目录 在CentOS7上安装Drone搭建CI持续集成环境 前言 安装前规划 安装过程 配置域名解析 安装Docker 拉取Drone Server镜像 添加GitHub OAuth Applic ...

  4. Gitlab CI 持续集成的完整实践

    来源:https://dwz.cn/mWyVHoSm 借着公司代码库迁移到私有Gitlab的契机,我接下持续集成的工作,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持续集成.总体 ...

  5. Windows环境搭建 Gitlab 服务器

    Windows环境搭建 Gitlab 服务器 01 背景 新公司测试部门目前没有专门的代码管理工具,出于管理方便,我在 Window10上搭建了Git 服务器,用于日常各项目自动化脚本的管理. 02 ...

  6. CI持续集成系统环境---部署gerrit环境完整记录

    转载自: http://www.cnblogs.com/kevingrace/p/5624122.html 开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如 ...

  7. 使用CruiseControl搭建自己的持续集成环境

    在敏捷开发过程中我们会实施很多优秀实践,比如站立式会议.结对编程.持续集成等等.本文主要讲解如何运用CruiseControl搭建你的持续集成环境. 一:CruiseControl介绍 CruiseC ...

  8. 使用Jenkins搭建iOS/Android持续集成打包平台

    http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...

  9. CI持续集成系统环境---部署Jenkins完整记录

    最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波. 来源网络:[原创]CI持续集成系统环境---部署Jenkins完整记录 - 散尽浮华 - 博客园 Jenkins通过脚本任务触发,实现代 ...

最新文章

  1. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java
  2. 如何使用canvas绘图
  3. python游戏编程入门书籍推荐-Python游戏编程入门3
  4. 删除vector指定位置的元素
  5. HDU 5673 Robot 卡特兰数
  6. LVM逻辑卷使用手册
  7. 中value大小_如何在Spring/SpringBoot 中做参数校验?你需要了解的都在这里!
  8. POJ 3311 Hie with the Pie (状压DP)
  9. Cache基本原理之:结构
  10. Archlinux桌面配置指南
  11. CCSK云安全认证-M3-管理云计算的安全性和风险
  12. 虚拟打印机安装后没了该怎么办
  13. 小米 信号测试软件,如何测试出本地的联通、电信、移动信号网络的强弱?
  14. 动态指针时钟:利用pyqt5制作指针钟表显示实时时间
  15. Gateway统一网关(2021-11-14)
  16. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
  17. 为什么大数据工程师比Java程序员工资高
  18. 雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万?
  19. 毕业一年的组长,刚去了阿里做Devops。年薪40W的offer
  20. Jmeter beanshell语法

热门文章

  1. windows 7 睡眠和休眠的区别
  2. 使用iframe+postMessage跨域操作和通信
  3. unigui中TUniDBEdit的OnEndDrag问题
  4. C:如何分解整数(从末位往前取以及从首位往后取)
  5. 前端 html border-right: 1px solid red;
  6. Qt5中用QLCDNumber显示时间
  7. 利用STM32F唯一96bit序列号实现反拷贝加密的源代码公开(转)
  8. [翻译]NUnit---Description and Exception Attributes(十一)
  9. 基本算法个人PHP 实现(四)
  10. Web.Config介绍