gitlab 目录tag_【环境搭建】gitlab-ci(持续集成)
背景
服务和服务器开始多起来了,一个个搞效率太低,所以准备用持续集成来提高效率
原理
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的配置文件
- 注意 tag可以有多个,各 tag之间用逗号隔开。如果你使用了多个 tag,那么当你想用这个 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(持续集成)相关推荐
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- 在CentOS7上安装Drone搭建CI持续集成环境
文章目录 在CentOS7上安装Drone搭建CI持续集成环境 前言 安装前规划 安装过程 配置域名解析 安装Docker 拉取Drone Server镜像 添加GitHub OAuth Applic ...
- Gitlab CI 持续集成的完整实践
来源:https://dwz.cn/mWyVHoSm 借着公司代码库迁移到私有Gitlab的契机,我接下持续集成的工作,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持续集成.总体 ...
- Windows环境搭建 Gitlab 服务器
Windows环境搭建 Gitlab 服务器 01 背景 新公司测试部门目前没有专门的代码管理工具,出于管理方便,我在 Window10上搭建了Git 服务器,用于日常各项目自动化脚本的管理. 02 ...
- CI持续集成系统环境---部署gerrit环境完整记录
转载自: http://www.cnblogs.com/kevingrace/p/5624122.html 开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如 ...
- 使用CruiseControl搭建自己的持续集成环境
在敏捷开发过程中我们会实施很多优秀实践,比如站立式会议.结对编程.持续集成等等.本文主要讲解如何运用CruiseControl搭建你的持续集成环境. 一:CruiseControl介绍 CruiseC ...
- 使用Jenkins搭建iOS/Android持续集成打包平台
http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...
- CI持续集成系统环境---部署Jenkins完整记录
最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波. 来源网络:[原创]CI持续集成系统环境---部署Jenkins完整记录 - 散尽浮华 - 博客园 Jenkins通过脚本任务触发,实现代 ...
最新文章
- 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java
- 如何使用canvas绘图
- python游戏编程入门书籍推荐-Python游戏编程入门3
- 删除vector指定位置的元素
- HDU 5673 Robot 卡特兰数
- LVM逻辑卷使用手册
- 中value大小_如何在Spring/SpringBoot 中做参数校验?你需要了解的都在这里!
- POJ 3311 Hie with the Pie (状压DP)
- Cache基本原理之:结构
- Archlinux桌面配置指南
- CCSK云安全认证-M3-管理云计算的安全性和风险
- 虚拟打印机安装后没了该怎么办
- 小米 信号测试软件,如何测试出本地的联通、电信、移动信号网络的强弱?
- 动态指针时钟:利用pyqt5制作指针钟表显示实时时间
- Gateway统一网关(2021-11-14)
- Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
- 为什么大数据工程师比Java程序员工资高
- 雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万?
- 毕业一年的组长,刚去了阿里做Devops。年薪40W的offer
- Jmeter beanshell语法
热门文章
- windows 7 睡眠和休眠的区别
- 使用iframe+postMessage跨域操作和通信
- unigui中TUniDBEdit的OnEndDrag问题
- C:如何分解整数(从末位往前取以及从首位往后取)
- 前端 html border-right: 1px solid red;
- Qt5中用QLCDNumber显示时间
- 利用STM32F唯一96bit序列号实现反拷贝加密的源代码公开(转)
- [翻译]NUnit---Description and Exception Attributes(十一)
- 基本算法个人PHP 实现(四)
- Web.Config介绍