gitlab runner实现自动化部署
前言
GitLab Runner是一个开源的项目,是用来执行GitLab中的项目的根目录下创建的.gitlab-ci.yml 脚本的工具。GitLab-CI可以比喻成管理工人的工厂,Runner是工厂里的工人,每个工人需要在工厂进行注册,所负责的项目不同,所做的工作也不同。当工厂某一个项目发生变动时,需要通知对应的工人去做对应的工作。
具体部署流程图
GitLab Runner简介
1. Runner类型
- Shared Runner:所有工程都能够用的,且只有系统管理员能够创建
- Specific Runner:只有特定的项目可以使用。
2. GitLab Runner中相关概念介绍
管道(pipeline)
每个推送到 Gitlab 的提交都会产生一个与该提交关联的管道(pipeline),若一次推送包含了多个提交,则管道与最后那个提交相关联,管道(pipeline)就是一个分成不同阶段(stage)的作业(job)的集合。阶段(Stage)
阶段是对批量的作业的一个逻辑上的划分,每个 GitLab CI/CD 都必须包含至少一个 Stage。多个 Stage 是按照顺序执行的,如果其中任何一个 Stage 失败,则后续的 Stage 不会被执行,整个 CI 过程被认为失败
以图中所示为例,整个 CI 环节包含三个 Stage:build、test 和deploy。build 被首先执行。如果发生错误,本次 CI 立刻失败;
test 在 build 成功执行完毕后执行。如果发生错误,本次 CI 立刻失败;
deploy 在 test 成功执行完毕后执行。如果发生错误,本次 CI 失败。
下图是Gitlab对阶段和阶段状态的展示:
- 作业(Job)
作业就是运行器(Runner)要执行的指令集合,Job 可以被关联到一个 Stage。当一个 Stage 执行的时候,与其关联的所有 Job 都会被执行。在有足够运行器的前提下,同一阶段的所有作业会并发执行。作业状态与阶段状态是一样的,实际上,阶段的状态就是继承自作业的。
关于job中详细的参数介绍,请移步https://docs.gitlab.com/runner/
准备工作
- 准备gitlab 测试服务器,用于gitlab上的代码存储、CI等的配置
- 准备一台部署服务器,用于安装gitlab-ruuner并部署代码
开始Go!
1. 准备gitlab服务器,并创建一个项目
2. 准备一台部署服务器,用于安装gitlab-ruuner并部署代码
1. 在部署服务器上安装gitlab-runner
# 安装gitlab-runner
yum install gitlab-runner
2. 向GitLab-CI注册gitlab-runner
- 找到你的gitlab上存放的项目,找到settings–>CI/CD–>Runner
- 部署服务器上进行runner注册
gitlab-runner register
- url:gitlab所在的测试服务器地址
- token:项目的token,用于关联runner和项目
- name:runner的名字,用于区分runner
- tags:用于匹配任务(jobs)和执行任务的设备(runners),此处不填直接回车时,默认Can run untagged jobs值为true
- executor:执行环境
- 注册成功之后,我们就可以在gitlab的CI配置中看到刚才注册的runner了
- 点开注册好的runner,可以看到具体配置内容
注意:如果你设置了Can run untagged jobs为No,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能运行对应的runner,否则你任务可能一直在pending状态,找不到runner执行。
3. 启动gitlab-runner
- 前台启动
gitlab-runner run
- 后台启动(gitlab-runner service)
gitlab-runner install
gitlab-runner start
4. 配置ssh免登录,用于将gitlab-runner服务器上获取到的文件拷贝到服务器
- 首先登陆服务器,进入gitlab-runner用户下生成一对公钥,私钥对。生成过程需要两次输密码,直接回车即可。
ssh-keygen -t rsa -C 'your email@domain.com'
- 密钥默认保存位置在 ~/.ssh 目录下,打开后会看到私钥文件 id_rsa 和公钥文件 id_rsa.pub
- 复制公钥到你的部署服务器上
scp ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/root/.ssh/id_rsa.pub
- 把公钥追加到服务器ssh认证文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
5.此后,从本地上传文件到服务器就不需要输用户名,密码了。
5. 在gitlab中配置变量,用于.gitlab-ci.yml文件
- 项目的根目录下编写.gitlab-ci.yml文件
##缓存 node_modules/目录 下次构建不会删除
cache:paths:- node_modules/
stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy- build- deployfetch: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。stage: buildscript:- echo "=====start build======"- npm i - npm run build- echo "=====end build======"only:- masterartifacts: expire_in: 2 weekpaths: - dist/deploy-static:stage: deployscript:- echo "=====start deploy======"- scp -r ./dist root@$DEPLOY_SERVER_DEV:$WEB_DIR- echo "=====end deploy======"
6. 把.gitlab-ci.yml文件推送到gitlab仓储,触发流水线
- 点击每次构建状态,可以查看构建详情,如果有错误的话可以点开构建阶段,查看错误详情。
7. 到此,我们已经完成了一套完整对自动化部署,之后只有gitlab仓库有代码更新,就可以触发流水线了
gitlab runner实现自动化部署相关推荐
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...
- 基于Hyper-V、centos、搭建宝塔Linux结合gitLab实现前端自动化部署
本文涉及内容较为繁杂,自己也是头一次接触这方面内容,主要也是作为记录以免睡一觉起来忘了.. 一.准备工作 1.在windows控制面板-程序和功能里开启Hyper-V相关功能: 2.在菜单栏管理工具里 ...
- GitLab CI/CD 自动化部署全流程
CI/CD简介 CI/CD 是一种持续开发软件的方法,侧重于软件开发过程中的自动化,可以不断地进行构建.测试和部署代码.使用这种方法,从新代码开发到部署,可以减少人工干预甚至不用干预 CI(Conti ...
- gitlab CI/CD自动化部署
文章目录 1. gitlab Runner 1.1 安装gitlab Runner 1.2 注册runner 2. .gitlab-ci.yml的书写 3. 部署 3.1 docker方式部署 3.2 ...
- python项目自动化部署_Jenkins+GitLab+Msbuild+Python自动化部署.Net项目
发布应用 应用构建成功后,接下来是将构建项目的输出目录copy到应用服务器相应的站点目录中,由于目标的应用服务器都是windows系统,因此无法像linux系统一样通过ssh远程命令操作.目前提供了三 ...
- Jenkins + gitlab webhook实现自动化部署
1.先在Jenkins安装插件Gitlab Hook Plugin 和Build Authorization Token Root Plugin: 2.插件安装完成后在任务里添加token 3.在gi ...
- 使用GitLab CI和Docker进行容器应用自动化部署
容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具.同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD ...
- gitlab ci 自动化部署_lt;为什么准备使用GitLab做CICD流水线?/gt;
本文是<GitLabCI实践>教程基础部分内容,讲述为什么要使用GitLabCICD功能,点击上面图片获取免费公开课报名链接,欢迎报名学习! 传统的应用开发发布模式 开发团队在开发环境中完 ...
- Docker + GitLab CI/CD 实现自动化部署
使用Docker+gitlab ci/cd 实现自动化部署 文章目录 使用Docker+gitlab ci/cd 实现自动化部署 1. Docker 1.1 Docker是什么? 1.2 Docker ...
最新文章
- JBDC更新计数行以及调用存储过程返回多个结果集
- 【自定义注解使用】增加service层方法访问日志
- 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0
- [Leedcode][JAVA][第128题][最长连续序列][Hash]
- 线程属性 pthread_attr_t
- [翻译] Haneke(处理图片缓存问题)
- c语言中的运算符按位或,|按位或运算符
- 炒冷饭系列:设计模式 单例模式
- Fluent Design System 设计语言元素
- hashmap什么时候由链表转为红黑树
- 水仙花数(python)
- Java8 LocalDateTime 转时间戳 秒、毫秒
- 完全用Linux工作
- manjaro wechat
- Java--依照PDF模板进行数据的填充并输出
- 算法分析与设计实验报告 ——二分搜索程序算法的实现
- kmeans聚类图像的像素并可视化
- 淘宝图片加载不出来案件
- IMS的注册流程分析
- 5大要点,打造企业微信个人IP
热门文章
- bilibili手机视频下载目录整理脚本
- 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin
- Hadoop3.x完全分布式运行模式配置
- 总结下macbook 安装win10 双系统丢驱动的问题
- CoBOT助力ITSS技术要求标准制定和落地
- 大数据相加_c 大数据相加 class
- Win10 虚拟桌面的使用
- 计算机卡登录界面,win10电脑卡在登录界面怎么办
- c语言中双冒号意思_详解C++中的双冒号 ::
- [从头读历史] 第281节 始制文字 世界上的语系及语言