目前GitLab已经有了CI功能,即持续集成的功能。可以实现代码提交后自动测试、编译、发布、部署等自动化工作。关于这一块的内容,网上文章都是语焉不详。最近正需要GitLab自动部署,踩了不少坑,现把配置步骤记录下来,以供大家参考。

目标:代码提交到GitLab上,由GitLab的CI功能自动完成部署。

原理:GitLab在接收到代码提交事件时,通过.gitlab-ci.yml的配置信息与对应节点上的runner进行交互。

实现:如下

1. 安装Runner

Runner服务器可以GitLab所在服务器,也可以是程序需要部署的服务器,也可以是其它服务器。

# 在root下执行
# 下载gitlab-runner
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-10.5.0-1.x86_64.rpm
# 安装
rpm -ivh gitlab-runner-10.5.0-1.x86_64.rpm 

2. 配置Runner(可选)

默认情况,Runner是通过gitlab-runner的这个用户来执行一系列操作,其工作目录也是在gitlab-runner的用户目录下面。如果使用默认gitlab-runner用户操作一些文件时经常会遇到权限问题,就需要给gitlab-runner赋权。我们通过以下方式修改。

# 在root下执行
# 删除服务
gitlab-runner uninstall
# 添加服务
gitlab-runner install --working-directory /home/jack --user jack
# 重启服务
gitlab-runner restart
# 查看状态
gitlab-runner status
输出:gitlab-runner: Service is running!
# 查看是否生效
ps -ef | grep gitlab-runner
输出:root     17454     1  0 Mar23 ?        01:18:03 /usr/bin/gitlab-runner run --working-directory /home/jack --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user jack

3. 注册Runner

把该Runner信息注册给GitLab的CI服务,告诉CI ”我是谁,我能做什么“。

先打开GitLab上需要自动部署的项目界面,找到该项目的Settings –> CI/CD –> Runners settings 。不同版本的GitLab界面可能有些差别。

在红色的区域可以看到URL和Token,这两个加起来就是该项目的唯一信息了。然后我们Runner服务的root用户下执行以下命令

# 在root下执行
# gitlab-runner register
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...                   Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.200/   # 填写刚才看到的URL
Please enter the gitlab-ci token for this runner:
eHMqXjw9ELDy2StsRWXT    # 填写刚才看到的Token
Please enter the gitlab-ci description for this runner:
[dev_srv]:web_dev       # 描述一下该runner,和下面的tags相同即可
Please enter the gitlab-ci tags for this runner (comma separated):
web_dev                 # 该runner起个名字
Whether to run untagged builds [true/false]:
[false]:                # 直接回车
Whether to lock the Runner to current project [true/false]:
[true]:                 # 直接回车
Registering runner... succeeded                     runner=eHMqXjw9
Please enter the executor: shell, ssh, docker+machine, docker, docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes:
shell                  # 填写runner执行时需要使用什么执行器,一般都填shell或者docker。
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

这样就完成了Runner与CI之间的信息互注册。Runner知道了自己需要操作哪个项目,CI也知道了该runner的存在。接着刷新一下Runners settings界面,就会看到新注册的Runner了。

前面有一个绿色的圆就代表注册成功。

4. 配置yml文件

在项目根目录下添加一个.gitlab-ci.yml 文件。内容如下:

stages: - deploy
deploy:stage: deployscript:- cp -r * /opt/web
    only:- dev
    tags:- web_dev

stages下的deploy说明在代码提交后CI需要执行deploy节点的内容。
deploy的script就是一个个shell命令,这里需要注意每个命令都以杠+空格开头。
only:只有向dev分支提交代码时才生效。
tags:只有拥有该tags的Runner才需要执行。

5. 测试

向dev提交一次代码后,打开项目的CI/CD –> Pipelines界面,就可以看到CI的执行记录

如果状态为failed或者stucked等,可以点击该状态按钮进入详细界面看到错误信息。

6. 分析

为什么在yml中添加cp -r * /opt/web就可以完成部署了?

在安装Runner时,我们说到工作目录,在工作目录下有一个builds目录,Runner的一切工作都在这个目录下面进行。每次提交代码Runner就会自己fetch下代码,所以Runner默认就在本地代码仓库所在路径下。所以直接执行cp -r * /opt/web就可以把程序都复制过去了。当然,大家可以加上编译的命令,然后再部署。任你发挥。

GitLab自动部署(CI)相关推荐

  1. 记录-gitlab自动部署-git拉取代码失败构建失败 + linux系统升级git(yum安装 + 源码安装)

    遇见的问题 fatal: git fetch-pack: expected shallow list 在使用gitlab自动构建部署时,遇到的一个问题我第一次构建部署的时候成功了,但是后面再去部署构建 ...

  2. 配置gitlab自动部署

    一.安装gitlab runner 进入到服务器根目录 下载runner,根据自己对应服务器的型号自行选择下载: # Linux x86-64sudo wget -O /usr/local/bin/g ...

  3. Gitlab自动部署之四:使用Gitlab-runner部署Gitlab的项目

    前言 公司前端大佬因为某些原因离职了,走的比较匆忙,自己之前一直很少接触这方面的东西,一直都是一知半解.这两天我一边学,一边动手搭建,同时记录整个搭建过程. 这是一系列文章,从搭建 Gitlab 到 ...

  4. GitLab CI 自动部署netcore web api 到Docker

    前端篇文章中,我们已经成功的将asp.net core webapi在Docker容器中运行,并且部署了一套自己的GitLab环境. .Net & Docker(二)5分钟快速用Docker部 ...

  5. Springboot 项目通过 gitlab CI/CD 集成 k8s 自动部署

    本章节主要讲的是 springboot 项目发到 gitlab 仓库,触发 gitlab ci/cd 实现项目自动集成和部署,其中部署是以 k8s 方式部署 关于 gitlab-runner 安装和注 ...

  6. GitLab 8.15中引入了自动部署和Web终端

    最新的GitLab 8.15版提供了新的持续集成和持续部署(CI/CD)特性,目的在于自动化不同平台上的部署,并使用命令行界面让试机(Staging)或产品部署更加便捷. \\ GitLab的自动部署 ...

  7. docker 部署_GitLab CI 自动部署netcore web api 到Docker

    前端篇文章中,我们已经成功的将asp.net core webapi在Docker容器中运行,并且部署了一套自己的GitLab环境. .Net & Docker(二)5分钟快速用Docker部 ...

  8. 劈荆斩棘:Gitlab 部署 CI 持续集成

    阅读目录: install configue gitlab-ci-multi-runner restore nuget packages bulid .sln run unit tests confi ...

  9. gitlab流水线自动部署流程

    自动部署之前,需要准备的是放gitlab的服务器,运行gitlab-runner的服务器以及后端代码运行的服务器.需要先搭建好runner并放在自己的项目中,gitlab的 runner 主要作用是用 ...

最新文章

  1. 对存储还搞不清楚,先看看这篇文章-从51单片机上去理解存储器
  2. RMAN backup recovery area 命令
  3. optimized mysql_MySQL解释计划中“Select tables optimized away”的含义
  4. bootstrap和圣杯布局
  5. 数据结构与算法2——线性顺序存储
  6. linux关机机器语言,Linux 核心源代码分析 - 第十章 开机 关机 [续二] [超星]...
  7. TensorFlow on Windows: “Couldn't open CUDA library cudnn64_5.dll”
  8. Visual Basic.Net连各种数据库的几种方法
  9. CRC校验和CRC各种算法
  10. 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
  11. 手工扒网页模板简单流程
  12. 【计算机视觉】人脸识别--人脸识别技术综述
  13. 燃烧的远征java(二)-开发环境:eclipse 的使用技巧收集
  14. 关于安装VISIOnbsp;2007报错office.zh-…
  15. SVG中插入HTML标签
  16. android状态栏高度px,安卓720*1280界面尺寸规范参考
  17. Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
  18. 在自己的app中打开淘宝
  19. 22021年江苏高考成绩查询,2021年江苏高考位次查询及一分一段表排名查询
  20. 【Sciter】Sciter 结合 Preact 封装 图片查看器总结

热门文章

  1. 贪心算法--乘船问题
  2. oracle to_char 进制转换_Oracle 10进制转换2进制
  3. 华为超级计算机,华为超级计算机打破世界纪录,是否超越了我国第一的“神威太湖之光”?...
  4. Storage: Xcopy Offload
  5. 【寒假每日一题】AcWing 4700. 何以包邮?
  6. iOS开发逆向之应用重签名(下)
  7. JAVA计算员工基本工资
  8. 5G NR vs 4G LTE
  9. (哈工大)网络核心——数据交换的三种类型
  10. 摩根大通关于区块链的发展历程