概念
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action (动作):每个 step 可以依次执行一个或多个命令(action) 每个 action 就是一个独立脚本,因此可以做成代码仓库,使用userName/repoName的语法引用 action,相当于js里面import的功能
actions/setup-node@74bc508 # 指向一个 commit
actions/setup-node@v1.0 # 指向一个标签
actions/setup-node@master # 指向一个分支
实践
第一步是获取源码,使用的 action 是actions/checkout。
第二步是构建和部署,使用的 action 是JamesIves/github-pages-deploy-action。
- 服务器的ssh公钥放在---authorized_keys ssh-deploy需要
本地执行
git config –global user.name ‘xxxxx’
git config –global user.email ‘xxx@xx.xxx’
ssh-keygen -t rsa -C ‘注释文字’ //生成密钥
clip < ~/.ssh/id_rsa.pub
粘贴公钥到服务器~/.ssh/authorized_keys文件中
vim ~/.ssh/authorized_keys
私钥放在 github项目 setting---secrets--action 设置ACCESS_TOKEN
新建action secret:
clip < ~/.ssh/id_rsa
- 新建.yml文件 (根目录下.github/workflows/)
# 一个workflow,名为deploy to tengxunyun
name: deploy to tengxunyun
on: # 此CI/CD触发时的事件
push: # 在代码提交时自动触发
branches:
- main
# 一个 CI/CD 的工作流有许多 jobs 组成,比如最典型的 job 是 lint,test,build。
jobs:
build: # 构建job
runs-on: ubuntu-latest # 跑workflow的服务器系统
steps: # job的一系列动作
# 切换分支获取源码
- name: Checkout # step的名称,将会在 github action 的控制台中显示
# 选择一个action,可以理解为若干 steps.run,有利于代码复用
uses: actions/checkout@v3
# 安装使用 node:10
- name: use Node.js 10
uses: actions/setup-node@v3
with:
node-version: 14
# 运行命令,npm install && npm run build
- name: npm install and build
run: |
npm install
npm run build
env:
CI: true
# 部署到腾讯云服务器
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.0.7
env:
# 本地.ssh文件下的私钥id_rsa,存在secrets的TOKEN中
SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
# 复制操作的参数。"-avzr --delete"意味部署时清空服务器目标目录下的文件
ARGS: "-avzr --delete"
# 源目录,相对于$GITHUB_WORKSPACE根目录的路径
SOURCE: "dist/"
# 服务器域名
REMOTE_HOST: "xxx.xxx.xxx.xxx"
# 腾讯云默认用户名为root
REMOTE_USER: "root"
# 目标目录
TARGET: "/usr/share/nginx/html"
补充
action secret有什么用?
一些敏感信息可能不方便被人知道,我们可以将它放在Secrets里面,然后设置环境变量的时候可以用${{ secrets.ABC }}。设置环境变量有有什么用?--ssh-deploy@v2.0.7需要配置
git clone https 和 SSH 的区别
1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
2、https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
uses: actions/checkout@v3做了什么
它的作用是把你的 repo 添加到 runner 的某个文件夹中, 于是之后的 step 就可以访问这些文件