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

背景

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

实现步骤

1.安装gitlab-runner

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

1.拉取镜像

docker pull gitlab/gitlab-runner:latest

2.启动容器

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文件权限

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

5.将gitlabgitlab-runner整合到一起

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

docker exec -it gitlab-runner gitlab-runner register

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

上面在“Runner设置时指定以下URL”就是你要输入的路径,以及下面的注册令牌,也就是token
gitlab-runner实现CI/CD基本流程

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

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

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

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文件

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-runner实现CI/CD基本流程

关于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实现CI/CD基本流程

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

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

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

原文链接:https://juejin.cn/post/7336287879331037235 作者:郭兆东

(0)
上一篇 2024年2月18日 下午4:58
下一篇 2024年2月18日 下午5:08

相关推荐

发表回复

登录后才能评论