什么是 CI/CD
什么是 CI/CD?来看一下红帽的解释:
CI(Continuous Interaction)持续集成,每次提交代码后,可以让机器去做一些事情来维护安全性和稳定性。在工作中配置后,触发 CI 自动化工具就会触发构建、测试...等工作。
CD 有两种意思(Continuous Delivery)持续交付,提交代码后,自动化工具会会自动进行错误测试并上传到存储库,最后由运维团队将其部署在实时的生产环境中。另一个意思是(Continuous Deployment)持续部署,是将存储库发布到生产环境。
什么是 Github Actions
Github Actions 是 GitHub CI 服务。
GitHub Actions 为每个任务 (job) 都提供了一个虚拟机来执行,每台虚拟机都有相同的硬件资源:
- 2-core CPU
- 7 GB RAM 内存
- 14 GB SSD 硬盘空间
使用限制:
- 每个仓库只能同时支持20个 workflow 并行。
- 每小时可以调用1000次 GitHub API 。
- 每个 job 最多可以执行6个小时。
- 免费版的用户最大支持20个 job 并发执行,macOS 最大只支持5个。
- 私有仓库每月累计使用时间为2000分钟,超过后$ 0.008/分钟,公共仓库则无限制。
Github Actions 使用
想要使用 Github Actions 需要在项目 .github/workflows/ 下新建一个 .yml 结尾的文件,GitHub 只要发现.github/workflows 目录里面有.yml 文件,就会按照 .yml 触发条件在符合条件时自动运行工作流程。
项目 CI 模版详解
下面以我的博客项目 CI 模版为例讲述一下 Github Actions 的配置用法
name: Publish And Deploy # 为这个 actions 命名,忽略此字段,则默认会设置为 workflow 文件名
on: # 此CI/CD触发时的事件
push: # 在代码提交时自动触发,同样也可以指定在 打 tag、release、pull_request、定时、某个文件变动、仓库被start 时触发
branches:
- main
jobs: # CI 要执行的任务
build-and-deploy: # 要执行任务的名字这个名字可以随便改 job1、job2... 都行
runs-on: ubuntu-latest # 当前任务运行环境 目前支持 Windows、Ubuntu、MacOs
steps: # 在 ubuntu-latest 下运行以下步骤
# 下载源码
# uses 的作用是使用另一个仓库的代码,如下
# uses: actions/checkout@master 使用 actions 用户的 checkout 仓库的 master
- name: Checkout # 步骤的名字,可以不写
uses: actions/checkout@master # 下载仓库的代码
# 打包构建
- name: Build
uses: actions/setup-node@master # 在当前系统下使用 node 环境,这里可以切换node 环境
- run: npm install # run 为在系统在执行该命令
- run: npm run build
# 命名这个任务为发布Deploy
# 注意这个步骤中使用的 secrets.xxx 变量都是在 GitHub 仓库中配置的,下文中有配置讲解
- name: Deploy
uses: cross-the-world/ssh-scp-ssh-pipelines@master # 使用 ssh 上传工具将代码上传至服务器
env:
WELCOME: "ssh scp ssh pipelines"
LASTSSH: "Doing something after copying"
with:
host: ${{ secrets.HOST }}
user: ${{ secrets.USERNAME }}
pass: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
connect_timeout: 10s
first_ssh: |
rm -rf /var/www/html/*
scp: |
'./docs/.vuepress/dist/*' => /var/www/html/
job2: # build-and-deploy 之后执行的第二个任务,这里演示使用本身项目中没有 job2 这个任务
needs: build-and-deploy # 依赖 build-and-deploy,等 build-and-deploy 执行完后再执行 job2
GitHub Secrets 变量配置
在 CI 的过程中可能会使用到敏感信息,入服务器 IP,端口,账户,密码等,而 CI 文件在项目中是开发者可以见的,不管是不是开源项目都是有较大风险的,为了能在 CI 中使用这些信息需要配置一下 GitHub Secrets。
1、进入仓库 Settings tab 页,选择 Secrets 选项即可对 Secrets 信息进行管理
2、点击新增按钮即可新增 Secret
查看 CI 执行的流程
按照上述流程,完成了 .yml 文件和 Secrets 配置后就可以开始跑 CI 了,文件配置的触发条件为推送代码至 main 分支,只要将仓库中的 main 分支推送至 Github 就自动触发了。
进入 Github 仓库的 actions tab,就可以看到 CI 的任务列表。
选择进度 CI 任务可以看到 CI 执行的流程