前言

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/

准备工作

  1. 准备gitlab 测试服务器,用于gitlab上的代码存储、CI等的配置
  2. 准备一台部署服务器,用于安装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

  1. url:gitlab所在的测试服务器地址
  2. token:项目的token,用于关联runner和项目
  3. name:runner的名字,用于区分runner
  4. tags:用于匹配任务(jobs)和执行任务的设备(runners),此处不填直接回车时,默认Can run untagged jobs值为true
  5. 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服务器上获取到的文件拷贝到服务器

  1. 首先登陆服务器,进入gitlab-runner用户下生成一对公钥,私钥对。生成过程需要两次输密码,直接回车即可。
ssh-keygen -t rsa -C  'your email@domain.com'
  1. 密钥默认保存位置在 ~/.ssh 目录下,打开后会看到私钥文件 id_rsa 和公钥文件 id_rsa.pub
  2. 复制公钥到你的部署服务器上
scp ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/root/.ssh/id_rsa.pub
  1. 把公钥追加到服务器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实现自动化部署相关推荐

  1. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  2. 基于Hyper-V、centos、搭建宝塔Linux结合gitLab实现前端自动化部署

    本文涉及内容较为繁杂,自己也是头一次接触这方面内容,主要也是作为记录以免睡一觉起来忘了.. 一.准备工作 1.在windows控制面板-程序和功能里开启Hyper-V相关功能: 2.在菜单栏管理工具里 ...

  3. GitLab CI/CD 自动化部署全流程

    CI/CD简介 CI/CD 是一种持续开发软件的方法,侧重于软件开发过程中的自动化,可以不断地进行构建.测试和部署代码.使用这种方法,从新代码开发到部署,可以减少人工干预甚至不用干预 CI(Conti ...

  4. gitlab CI/CD自动化部署

    文章目录 1. gitlab Runner 1.1 安装gitlab Runner 1.2 注册runner 2. .gitlab-ci.yml的书写 3. 部署 3.1 docker方式部署 3.2 ...

  5. python项目自动化部署_Jenkins+GitLab+Msbuild+Python自动化部署.Net项目

    发布应用 应用构建成功后,接下来是将构建项目的输出目录copy到应用服务器相应的站点目录中,由于目标的应用服务器都是windows系统,因此无法像linux系统一样通过ssh远程命令操作.目前提供了三 ...

  6. Jenkins + gitlab webhook实现自动化部署

    1.先在Jenkins安装插件Gitlab Hook Plugin 和Build Authorization Token Root Plugin: 2.插件安装完成后在任务里添加token 3.在gi ...

  7. 使用GitLab CI和Docker进行容器应用自动化部署

    容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具.同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD ...

  8. gitlab ci 自动化部署_lt;为什么准备使用GitLab做CICD流水线?/gt;

    本文是<GitLabCI实践>教程基础部分内容,讲述为什么要使用GitLabCICD功能,点击上面图片获取免费公开课报名链接,欢迎报名学习! 传统的应用开发发布模式 开发团队在开发环境中完 ...

  9. Docker + GitLab CI/CD 实现自动化部署

    使用Docker+gitlab ci/cd 实现自动化部署 文章目录 使用Docker+gitlab ci/cd 实现自动化部署 1. Docker 1.1 Docker是什么? 1.2 Docker ...

最新文章

  1. JBDC更新计数行以及调用存储过程返回多个结果集
  2. 【自定义注解使用】增加service层方法访问日志
  3. 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0
  4. [Leedcode][JAVA][第128题][最长连续序列][Hash]
  5. 线程属性 pthread_attr_t
  6. [翻译] Haneke(处理图片缓存问题)
  7. c语言中的运算符按位或,|按位或运算符
  8. 炒冷饭系列:设计模式 单例模式
  9. Fluent Design System 设计语言元素
  10. hashmap什么时候由链表转为红黑树
  11. 水仙花数(python)
  12. Java8 LocalDateTime 转时间戳 秒、毫秒
  13. 完全用Linux工作
  14. manjaro wechat
  15. Java--依照PDF模板进行数据的填充并输出
  16. 算法分析与设计实验报告 ——二分搜索程序算法的实现
  17. kmeans聚类图像的像素并可视化
  18. 淘宝图片加载不出来案件
  19. IMS的注册流程分析
  20. 5大要点,打造企业微信个人IP

热门文章

  1. bilibili手机视频下载目录整理脚本
  2. 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin
  3. Hadoop3.x完全分布式运行模式配置
  4. 总结下macbook 安装win10 双系统丢驱动的问题
  5. CoBOT助力ITSS技术要求标准制定和落地
  6. 大数据相加_c 大数据相加 class
  7. Win10 虚拟桌面的使用
  8. 计算机卡登录界面,win10电脑卡在登录界面怎么办
  9. c语言中双冒号意思_详解C++中的双冒号 ::
  10. [从头读历史] 第281节 始制文字 世界上的语系及语言