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

背景

公司的生产环境发布基本都是运维人员通过jenkins来实现CI/CD的流程,但是测试环境运维不管了,只能自己去搞,本来都是在linux服务器上每次手动上传打包文件,然后手动执行几个命令来发布,但是每次都要手动操作占用了不少开发时间(摸鱼时间),去调研了下就决定使用gitlabgitlab-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.将gitlabgitlab-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在同一台机器上所以可以直接删除当前项目文件和拷贝文件,如果不在同一台服务器需要通过SCPSFTP等操作远程服务

常见问题

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...

相关推荐
帅儿二郎5 天前
ELK:日志监控平台部署-基于elastic stack 8版本
linux·运维·elk·自动化运维·elastic·日志监控平台·日志分析平台
concisedistinct14 天前
在多数据中心环境中,自动化运维如何保证跨区域的一致性?网络延迟导致的数据不一致是否可以完全避免?|自动化运维|跨区域一致性
运维·网络·自动化·自动化运维·数据中心
winkee14 天前
OpenSSL 使用 pkcs#8 格式来封装密钥
linux·自动化运维·devops
北京_宏哥1 个月前
🔥《最新出炉》系列初窥篇-Python+Playwright自动化测试-33-处理https 安全问题或者非信任站点-上篇
前端·python·自动化运维
tangdou3690986551 个月前
两种方案手把手教你多种服务器使用tinyproxy搭建http代理
运维·后端·自动化运维
子洋1 个月前
自动化部署脚本教程:前端项目的自动打包、上传与部署
前端·后端·自动化运维
洛小豆1 个月前
有趣的实战经验分享:自动化测试中如何精确模拟富文本编辑器中的输入与提交
前端·javascript·自动化运维
cooldream20092 个月前
828华为云征文 | 华为云X实例监控与告警管理详解
华为云·自动化运维·云监控·告警
码上飞扬2 个月前
深入浅出 Ansible 自动化运维:从入门到实战
运维·ansible·自动化运维
疾风终究没有归途2 个月前
Ansible自动化运维实战:打造高效、可靠的系统管理方案!
运维·自动化运维·配置管理·应用部署