返回

CI/CD方案的设计思路:把持续集成放在本地

前端

现在越来越多的企业,都在采用持续集成和持续交付(CI/CD)的开发模式,这套模式的主要目的是,为了加速软件开发的节奏,提高交付的质量,但传统上CI/CD都是在服务端进行,就是将持续集成和持续交付的软件部署在服务端,这样每次开发者代码提交之后,都会触发服务器的自动化构建和测试,甚至还会部署,这样看上去很完美,但其实有着不少弊端。

本地CI/CD的优点

优点十分明显,主要在于:

  • 提高构建速度 :因为本地构建,所以网络的传输时间省去了。
  • 构建结果准确 :本地构建,完全使用开发者的环境,所以构建的结果才是最准确的。
  • 提升反馈速度 :每次代码提交,本地构建的过程非常快,所以CI/CD的反馈也非常快。

本地CI/CD的缺点

从表面上看,本地CI/CD挺完美的,但深入了解之后,会发现这些缺点:

  • 需要自己搭建环境 :因为是本地构建,所以,本地需要安装和配置各种工具,这个搭建工作比较复杂。
  • 不适合大型项目 :如果是几十G的大型项目,本地拉取代码、构建、测试,会非常浪费时间。
  • 团队协作不友好 :本地CI/CD,只适合个人,不适合团队协作。

以Npm Scritps为例,讲述如何在本地构建

1. Npm的介绍
Npm是一个包管理器,用来管理Nodejs的第三方模块,但Npm不仅仅只能管理第三方模块,还能执行一段Javascript代码。

2. Npm的package.json文件
在Nodejs项目中,都会有一个package.json文件,里面记录了当前项目,需要使用的第三方模块,同时,还可以指定一些额外的字段,例如scripts,scripts字段,可以指定一些额外的命令,例如:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

有了scripts字段,那么就可以在终端执行npm run start命令,那么就会运行node index.js命令,还可以指定多个命令,例如:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

有了scripts字段,那么就可以在终端执行npm run start命令,那么就会运行node index.js命令,还可以执行npm run test命令,那么就会执行echo "Error: no test specified" && exit 1命令。

3. 本地构建
那么,知道Npm的package.json文件的scripts字段之后,就可以用来进行本地构建,例如:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "tsc"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

在这个package.json文件中,新增了一个scripts字段,值为"build": "tsc",那么就可以通过执行npm run build命令,来执行tsc命令,从而实现本地构建。

以Git Hooks为例,讲述如何在本地构建

1. Git Hooks的介绍
Git Hooks是一个非常强大的功能,它可以用来在特定事件发生时,自动执行一些命令,这些事件包括:commit、push、pull等,例如:

pre-commit:在每次提交代码之前,都会执行该钩子。

2. Git Hooks的配置
Git Hooks的配置非常简单,只需要在项目根目录下,创建一个名为.git/hooks的目录,然后在这个目录下,创建一些以hook-name为文件名的文件,例如:

.git/hooks/pre-commit

在这个文件中,可以写入任何想要执行的命令,例如:

#!/bin/sh
echo "This is a pre-commit hook"

当执行git commit命令时,就会自动执行这个钩子,从而输出"This is a pre-commit hook"

3. 本地构建
那么,知道Git Hooks之后,就可以用来进行本地构建,例如:

#!/bin/sh
npm run build

在这个文件中,写入npm run build命令,那么在执行git commit命令时,就会自动执行这个钩子,从而执行npm run build命令,从而实现本地构建。

总结

本文讲述了如何把CI/CD中持续集成的环节,放在开发者本地的方案。首先从优点,缺点评价了该方案,并以Npm Scritps和Git Hooks为例,具体说明了操作方法。