首页 > 其他分享 >使用gitlab实现CICD

使用gitlab实现CICD

时间:2023-06-30 11:24:26浏览次数:44  
标签:实现 CICD gitlab yarn runner job build docker

一、概念介绍

  GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发:

  • Continuous Integration (CI)  持续集成
  • Continuous Delivery (CD)     持续交付
  • Continuous Deployment (CD)   持续部署

  持续集成的工作原理是将小的代码块推送到Git仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。

  持续交付和部署相当于更进一步的CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。

  这些方法使得可以在开发周期的早期发现bugs和errors,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

  GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,改文件位于仓库的根目录下。文件中指定的脚本由GitLab Runner执行。

1.1 基本 CI/CD 工作流程

 1.2. 深入了解CI/CD基本工作流程

  如果我们深入研究基本工作流程,则可以在DevOps生命周期的每个阶段看到GitLab中可用的功能,如下图所示:

 二、.gitlab-ci.yml文件编写


  variables: # 定义全局变量 

    PROJECT_IMAGES: "irweb:$CI_COMMIT_TAG" # gitlab系统变量,获取提交tag的信息

stages:  # 声明阶段
  - build
  - docker
  - test
  - deploy

yarn-build-job:
  stage: build  # 阶段标签
  image: node:18.0.0 # 基于docker镜像
  tags: # 此处为选择gitlab-runner服务的标签
    - 203web
  script: # 执行脚本命令
    - echo "开始构建打包"
    - yarn install
    - yarn build
    - echo "构建完成"
  artifacts: # 使用artifacts关键词可以将当前作业的一些文件存储起来,以便后边job使用
    paths:
      - build/ # 此处我们缓存了yarn build打包生成的文件,以便后续docker build的时候使用
only: # 此处定义只有git push tag的时候才会触发此job - tags docker-build-job: stage: docker tags: - 203web script: - echo "开始docker build" - echo $PROJECT_IMAGES - docker build -t $PROJECT_IMAGES . - echo "构建完成" needs: # 此处声明依赖于yarn-build-job,确保不会找不到build文件夹 - job: yarn-build-job artifacts: true only: - tags lint-test-job: stage: test tags: - 203web script: - echo "查看镜像" - docker images only: - tags deploy-job: stage: deploy tags: - 203web script: - echo "开始部署" - echo "Application successfully deployed." # 此处替换为docker run的执行命令即可,在此处可以优化,例如 docker stop容器,然后docker rm删除容器,然后启动本次跟新的容器
- echo "部署成功" rules: # 跟only一个意思 - if: $CI_COMMIT_TAG

更多用法参考官方文档

三、项目添加cicd

1.1 项目开启cicd

 

1.2 添加本项目gitlab-runner

 

   为项目添加的runner,只能用于本项目。

  gitlab-runner有多个种,本项目的,项目组的,还有就是全局。这样一个runner可以用于多个,由于权限问题,此处只是选择单项目

  我们选择使用docker启动gitlab-runner

  docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:latest

  文件挂载地址可以自定义,以免到时候找不到,清楚配置文件位置,方便实时更改

  接下来我们注册gitlab-runner

  容器启动后,我们进入容器

  docker exec -it gitlab-runner-docker sh

        

  查看帮助信息

       

   注册runner

  gitlab-runner register 

      

 

  根据提示信息一步步添加

  1、输入gitlab地址和token,此处就是

        

  2、修改配置文件

  

  ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

  

  注意账号权限,能否打开此配置文件,然后重启容器

   3、查看添加结果,如下添加成功 

    

 四、cicd触发

  至此准备工作就完成了

  开始准备验证

  1、在项目中我们给自己的项目打一个tag

    git add . 

    git commit -m 'test'

    git tag v1.0.0

  2、推送到gitlab

    git push origin v1.0.0

  3、查看触发效果

  

 

以上就是关于前端的一个cicd流水线

大概说一下踩的坑

  1、一开始使用artifacts将文件夹缓存给下一个任务使用,由于我yarn-build-job和docker-build-job使用的stage都是build,导致docker-build-job执行时找不到build文件。

  所以后来将两个任务分开,而且还加了needs(依赖)

  2、关于yarn-build-job中的images node的版本,导致yarn install执行不成功,一次注意版本

  3、docker执行提示

  

  我们只需要修改配置文件,然后重启容器即可

  ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

  

  我使用ubuntu系统,请注意用户权限问题

 

标签:实现,CICD,gitlab,yarn,runner,job,build,docker
From: https://www.cnblogs.com/xiaoyuzai09/p/17516131.html

相关文章

  • PC网站如何实现微信扫码登录
    不管你运营什么类型的网站,用户注册都是很重要的一个环节,用户注册的方式也是很多的,比如邮箱注册、手机号注册、第三方授权登录等。其中,第三方授权登录是最常用的一种方式,微信扫码登录是其中的一种,但是微信扫码登录的实现方式有很多种,比如公众号扫码,小程序扫码,网页扫码等。本文将介......
  • 报表的实现以及用户组资源注册
    报表的实现以及用户组资源注册报表实现1.1帆软报表是以表格、图表的形式来动态展示数据,企业通过报表进行数据分析,进而用于辅助经营管理决策。FineReport是一款用于报表制作,分析和展示的工具,用户通过使用FineReport可以轻松的构建出灵活的数据分析和报表系统,大大缩短项目周......
  • gitlab-docker部署最终版
    下载gitlab镜像dockerpullgitlab/gitlab-ce:latest 运行mkdirgitlabgitlab/etcgitlab/loggitlab/optdockerrun-id-p3000:80-p9922:22-v/root/gitlab/etc:/etc/gitlab-v/root/gitlab/log:/var/log/gitlab-v/root/gitlab/opt:/var/opt/gitlab--restart......
  • AI 和 DevOps:实现高效软件交付的完美组合
    AI时代,DevOps与AI共价结合。AI由业务需求驱动,提高软件质量,而DevOps则从整体提升系统功能。DevOps团队可以使用AI来进行测试、开发、监控、增强和系统发布。AI能够有效地增强DevOps驱动流程,从开发人员的业务实用性和支持的角度来看,评估AI在DevOps中的重要性是十分......
  • Java线程实现方式
    在Java中,可以通过以下几种方式实现线程:继承Thread类:可以创建一个继承自Thread类的子类,并重写run()方法,在run()方法中定义线程的执行逻辑。然后通过创建该子类的实例,并调用start()方法来启动线程。publicclassMyThreadextendsThread{@Overridepublicvoidrun()......
  • 全栈测试开发系列----WebDriver API及对象识别技术(二)---selenium验证码处理的多种实现
    前言对于测试人员而言,不管是进行性能测试还是自动化测试,验证码的处理都是棘手的存在,在WEB应用中,大部分系统在用户登录的时候都要求用户输入验证码,且验证码的种类繁多,如纯数字、纯字母、汉子组合、数学题运算、滑动图标、图片、短信、邮箱、语音等。既然要实现验证码的处......
  • Vue实现组件间通信的11种方式
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址组件之间的通信是指不同组件之间在共享数据、传递消息或触发事件等方面进行交流和协作的过程。在应用程序中,不同的组件可能需要相互传递数据、共享状态、触发动作或响应事件等,以实现组件之间的协调和交互。vue组件之间的......
  • Python的手机测试工具uiautomator2库的实现原理
    使用python通过调试模式测试安卓手机APP,使用uiautomator2库是比较方便的,这个库的源码网址是:https://github.com/openatx/uiautomator2通过阅读源码,大概搞明白了其实现原理,它是通过调用adbutils库,获取UI的hierarchydump数据,然后检索对应的UI节点,计算此节点的UI区......
  • cruise模型,增程汽车仿真模型,串联混动,基于cruise simulink联合仿真。 实现增程器多点
    cruise模型,增程汽车仿真模型,串联混动,基于cruisesimulink联合仿真。实现增程器多点控制策略,及电制动优先的能量回收策略。提供cruise模型、控制策略文件以及策略说明文档,方便您在模型基础上进行扩展。原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/640342354950.html增程式......
  • 昆仑通态MCGS与台达伺服ASD-B2 通讯控制案例功能:通过昆仑通态MCGS触摸屏实现与台达AS
    昆仑通态MCGS与台达伺服ASD-B2 通讯控制案例功能:通过昆仑通态MCGS触摸屏实现与台达ASDB2通讯控制,全通讯控制台达B2驱动器速度设置,速度选择,速度启动,带扭矩限制速度控制,扭矩限制通讯设置。配件:昆仑通态MCGS触摸屏,台达ASDB2伺服驱动器+伺服电机。CN1接线端子,CN3伺服驱动器通讯......