【架构师(第四十五篇)】 服务端开发之认识 Github actions
2023-02-18 15:37:26 时间
CI/CD
要让开发人员更加专注于业务代码的开发,那么架构师就得保障研发流程。合理全面的 CI/CD
,自动化研发流程 ,能够提高研发效率,增加系统稳定性。
CI/CD
的核心概念是 持续集成、持续交付和持续部署。
CI 持续集成(Continuous Integration)
构建软件和完成初始测试的过程。
CD 持续交付(Continuous Delivery)
CI
在完成了构建、单元测试和集成测试这些自动化流程后,持续交付可以自动把已验证的代码发布到企业自己的存储库。
CD 持续部署(Continuous Deployment)
对于一个完整、成熟的 CI/CD
管道来说,最后的阶段是持续部署。它是作为持续交付的延伸,持续部署可以自动将应用发布到生产环境。
学习内容
- 使用
Github actions
进行CI/CD
- 学会
Docker
在node.js
项目中的应用 - 搭建测试环境,自动发布到测试机。
Github actions
初始化
?? 中文文档
随便选择一个 github
仓库,然后点击 actions
。
这里是一些模板,选择一个就会在项目的 .github/workflows
目录下,生成 .yml
文件。
红框里输入文件名,然后点击右面的 start commit
输入 commit message
,直接默认,点击 commit new file
代码仓库多了一个文件
本地拉一下代码,可以看到 .yml
文件已经存在了。
配置文件
默认的配置文件注释
# master 分支 自动测试
name: test # 测试名称 语义化即可
on: # 触发条件
push: # 在下面的分支进行 push 操作的时候触发
branches: # 触发的分支 可以设置多个
- main # 分支名称
paths: # 以下目录中的文件有改动就触发 可以不写 代表所有文件
- '.github/workflows/**'
- '__test__/**'
- 'src/**'
jobs: # 任务
test: # 任务名称 可以自定义 也可以使用第三方
runs-on: ubuntu-latest # 指定运行环境 操作系统 没有特殊情况不需要改
steps: # 步骤
- uses: actions/checkout@v2 # 第一个步骤 第三方的actions 等同于执行了 git pull
- name: Use Node.js # 第二个步骤 步骤名称 自定义
uses: actions/setup-node@v1 # 第三方的actions 安装 node.js
with: # 参数
node-version: 14 # nodejs 的版本
- name: lint and test # 第三个步骤 步骤名称 自定义
run: | # 自定义执行命令 多行的方式
npm i
npm run lint
npm run test:remote
test2: # 任务名称 可以自定义 也可以使用第三方
runs-on: ubuntu-latest # 指定运行环境 操作系统 没有特殊情况不需要改
steps: # 步骤
- run: touch a.txt # 自定义执行命令 单行的方式
- run: echo 100 > a.txt # a.text 写入内容
- run: cat a.txt # 读取 a.text 内容
流程
当本地 push
代码的时候,Actions
页面会出现当前 workflows
,黄色点说明还没有开始。
过了一会发现红色的,就是 workflows
失败了
点进去看一下,这里就会显示 workflows
的信息了,原来是没有 lint
命令。
去掉 npm run lint
再试一下,push
代码,通过了就是绿色的。
step 的四种方式
# 一 直接使用 uses 第三方
- uses: actions/checkout@v2
# 二 使用 name + uses 第三方
- name: Use Node.js
uses: actions/setup-node@v1
# 三 run | 多行的方式
run: |
npm i
npm run test:remote
# 四 run 单行的方式
- run: touch a.txt
- run: echo 100 > a.txt
- run: cat a.txt
Github actions 做自动化测试
pre-commit
时执行本地接口测试master push
时执行远程接口测试
// .github\workflows\test.yml
# master 分支 自动测试
name: test # 测试名称 语义化即可
on: # 触发条件
push: # 在下面的分支进行 push 操作的时候触发
branches: # 触发的分支 可以设置多个
- main # 分支名称
paths: # 以下目录中的文件有改动就触发 可以不写 代表所有文件
- '.github/workflows/**'
- '__test__/**'
- 'src/**'
jobs: # 任务
test: # 任务名称 可以自定义 也可以使用第三方
runs-on: ubuntu-latest # 指定运行环境 操作系统 没有特殊情况不需要改
steps: # 步骤
- uses: actions/checkout@v2 # 第一个步骤 第三方的actions 等同于执行了 git pull
- name: Use Node.js # 第二个步骤 步骤名称 自定义
uses: actions/setup-node@v1 # 第三方的actions 安装 node.js
with: # 参数
node-version: 14 # nodejs 的版本
- name: lint and test # 第三个步骤 步骤名称 自定义
run: | # 自定义执行命令 多行的方式
npm i
npm run lint
npm run test:remote
当 push
代码的时候会有两个 workflow
,一次 push
对应多个 workflow
是很正常的。
两个 workflow
都成功了。
由于非代码原因导致的错误,排除问题后可以点击 Re-run all jobs
而不用重新 push
代码。
相关文章
- [Go] GODEBUG=inittrace=1 查看所有执行的init函数
- [Go] go中init函数的执行顺序
- [Go] 获取Go二进制文件的真正执行路径os.Args
- [Go]解决goland terminal 环境变量不更新
- [Linux] 利用tcpdump和strace进行debug
- [Go]解决使用cgo时 exec:"gcc" executable file not found in %PATH%报错问题
- [Go] 使用读写锁对map资源进行安全处理
- [Linux] 使用awk比较两个文件的内容
- [Go] go test单元测试执行指定测试函数
- [Go]TCP服务中增加消息队列与工作池
- [Go]TCP服务中读写进行协程分离
- [Go] 轻量服务器框架tcp的粘包问题 封包与拆包
- [GO] golang中的变量与指针
- [GO] golang 中main包下入口文件调用其它go文件函数出现undefined
- [Go] 轻量服务器框架全局配置的实现以及解析json
- [Go] 轻量服务器框架基础TCP连接的抽象和封装
- [Go] 利用函数类型实现封装中的回调
- [Go] 轻量服务器框架基础TCP服务模块
- [Go] Windows/Linux/Mac交叉编译成指定系统的二进制可执行文件
- [Git]解决Please commit your changes or stash them before you merge.