使用gitlab实现CICD

发布时间 2023-06-30 11:15:56作者: 飞羽小鱼仔

一、概念介绍

  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系统,请注意用户权限问题