github action实践

572 阅读3分钟

概念

  • 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。

  1. 服务器的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
  1. 新建.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 就可以访问这些文件

参考:github.com/marketplace… juejin.cn/post/684490…