gitlab-runner实现CI/CD基本流程

背景

公司的生产环境发布基本都是运维人员通过jenkins来实现CI/CD的流程,但是测试环境运维不管了,只能自己去搞,本来都是在linux服务器上每次手动上传打包文件,然后手动执行几个命令来发布,但是每次都要手动操作占用了不少开发时间(摸鱼时间),去调研了下就决定使用gitlab的gitlab-runner来实现这个流程的自动化。

实现步骤

1.安装gitlab-runner

需要找个服务器,我使用的是测试环境服务所使用的linux服务器

1.拉取镜像

bash 复制代码
docker pull gitlab/gitlab-runner:latest

2.启动容器

bash 复制代码
docker run -d --name gitlab-runner --restart always -v /opt/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

-v 命令是把系统目录挂载到docker容器中,即在docker容器中可以访问到该目录

3.修改/var/run/docker.sock文件权限

bash 复制代码
sudo chown root:root /var/run/docker.sock
  1. 添加容器权限,保证容器可以使用宿主机的docker
bash 复制代码
docker exec -it gitlab-runner usermod -aG root gitlab-runner

5.将gitlab和gitlab-runner整合到一起

打开gitlab的设置-CI/CD-Runners设置,可以看到图中橙色打马赛克的两处后面是有用的

bash 复制代码
docker exec -it gitlab-runner gitlab-runner register

上面在"Runner设置时指定以下URL"就是你要输入的路径,以及下面的注册令牌,也就是token

到此,runner就和我gitlab里面的该项目集成到一起了

在gitlab上查看可以看到刚刚添加的runner信息。

bash 复制代码
gitlab-runner register  #默认交互模式下使用,非交互模式添加 --non-interactive
gitlab-runner list      #此命令列出了保存在配置文件中的所有运行程序
gitlab-runner verify    #此命令检查注册的runner是否可以连接,但不验证GitLab服务是否正在使用runner。 --delete 删除
gitlab-runner unregister   #该命令使用GitLab取消已注册的runner。
 
#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
 
#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner
 
#注销所有
gitlab-runner unregister --all-runners

2.配置gitlab-ci.yml文件

yml 复制代码
image: node:14.16.0

stages: #阶段
  - build

cache: #缓存
  paths:
   - node_modules
   - build

## 打包
build:
  tags:
    - deploy-test #这个是注册gitlab-runner时候填写的
  stage: build
  script:
    ##安装依赖
    - npm install --registry=https://registry.npmmirror.com
    ##打包
    - npm run build
    ## 删除当前项目文件
    - rm -rf /www-root/app-veta/*
    ## 拷贝打包产物到项目目录下
    - cp -rf ${CI_PROJECT_DIR}/build/* /www-root/app-veta/  
  artifacts:
    paths:
      - build/  # 将构建生成的文件作为 artifacts,以便后续阶段使用
  # 手动触发
  when: manual

因为gitlab是公司运维部署的,版本有些低,一些高级的配置没发进行,然后这边配置的是手动触发流水线操作,只能把几个步骤放在一个阶段进行,效果如下,每提交一次记录都会生成一个流水线,如果需要部署,直接点击下图红框处的build即可

关于gitlab-ci.yml的配置参数可以参考gitlab官网上,注意有些配置项之后新版本才支持的

此处我是手动触发,如果需要合并分支自动触发也可配置,最好把打包部署分开stage

此处我是项目服务和gitlab-runner在同一台机器上所以可以直接删除当前项目文件和拷贝文件,如果不在同一台服务器需要通过SCP或SFTP等操作远程服务

常见问题

1、gitlab-ci.yml中操作项目目录报错,例如rm -rf /www-root/app-veta/*会报目录不存在,一开始以为docker启动时候挂载目录没有挂载上,就在docker run -v后面又挂载了目录,然后进入docker中敲命令,是可以访问到该文件夹的,但是执行gitlab-ci.yml中的命令还是报同样错误,搞了好久终于发现问题所在,虽然docker中可以访问了,但是gitlab-runner不能访问,需要修改gitlab-runner的配置文件,下图是我的路径(路径可能会有所不同,具体配置gitlab-runner成功时会有显示的)

这个文件可以直接修改红框处,把系统目录挂载到gitlab-runner下面,保存文件即可生效,然后再重新运行流水线就不会报错了

参考文章:blog.csdn.net/m0_47010003...

相关推荐
梯度下降者1 天前
二、自动化运维架构师的三大核心能力
ci/cd·架构师·自动化运维·iac·平台工程
迪康软件zz2 天前
从 PHP 高危漏洞看纵深防御:资产盘点、补丁管理与端点防护实践
运维·安全·自动化运维
智能运维指南2 天前
企业 IT 管理软件如何选型?先理清监控、服务管理、配置与自动化能力
运维·自动化·自动化运维·嘉为蓝鲸
垚垚学技术_聚焦云原生2 天前
Ansible 变量体系详解:主机变量、组变量、全局变量优先级实战
ansible·自动化运维·devops·变量优先级
智能运维指南3 天前
企业 IT 运维自动化平台怎么选?从场景匹配到 POC 验证的完整评估框架
运维·自动化·自动化运维·嘉为蓝鲸
喵个咪4 天前
GoWind Ops 拆解:不引入分布式锁的多副本协调
后端·go·自动化运维
喵个咪4 天前
GoWind Ops 深度拆解:纯出站 Agent + MQTT 信令,把「管机器、跑项目、发脚本、构建分发」做扎实
后端·go·自动化运维
考虑考虑5 天前
nginx路由重写
运维·后端·自动化运维
费曼学习法7 天前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
云智慧AIOps社区10 天前
MSP 的增长瓶颈不在客户,在交付模式:人效与规模如何兼得?
运维·人工智能·自动化运维