GitHub Actions 自动化部署

426 阅读2分钟

参考:GitHub Actions 入门教程
参考:触发工作流程的事件
参考:创建个人访问令牌

来源

  • 持续集成,类似于 Travis CI
  • GitHub 只要发现 .github/workflows 目录里面有 .yml 文件,就会自动运行该文件。
  • 编写 .yml 文件,在工作流程中触发的事件中执行相应代码

创建最小权限用户

只想新建的用户仅对一个文件夹进行读写操作(不开放其它权限)
只需要创建一个最小权限的角色
并仅给其分配单个文件夹的权限
可以防止权限过高造成安全隐患

  • Xshell 连接服务器
  • su 命令用来切换用户角色
  • 切换到 root 用户角色:su root,可能需要输入密码
  • 创建用户:useradd [username], 以创建 au 角色为例(useradd au),此时创建的 au 用户 默认使用 au 用户组
  • 使用 setfacl 设置文件权限: setfacl -m u:[username]:rwx [dirname],例如:setfacl -m u:au:rwx /usr/web/html/blog(给 au 角色设置 blog 文件的读写执行权限)
  • 此时创建的用户仅有 /usr/web/html/blog 文件的读写执行权限

创建 SSH-KEY

  • 切换到 au 角色:su au,直接使用最小权限用户生成 SSH-KEY
  • 查看是否已经存在:ls -al ~/.ssh
  • 生成新的 ssh key:ssh-keygen -t rsa, 连续三次回车
  • 检测是否生成成功:ls -al ~/.ssh

修改 id_rsa.pub 名称

  • 通过 au 角色创建好 ssh-key 后,公钥和私钥一般在 /home/au/.ssh 目录下
  • 切换到 .ssh 目录:cd /home/au/.ssh
  • 名字改为 authorized_keys:cat id_rsa.pub >> authorized_keys
  • 删除 id_rsa.pub:rm id_rsa.pub

tar 命令

  • 压缩: tar -czvf blog.tgz ./*
  • 解压:tar xzvf blog.tgz

编写 ci.yml

参考文章
ssh-deploy

  1. KEY:上一步服务器新建的公钥id_rsa.pubcat id_rsa.pub 之后复制全部内容
  2. HOST:服务器 ip
  3. PORT:ssh 的端口号,默认为 22
  4. SOURCE:npm run build 之后打包的文件路径,相对地址(我的是打包到 webView 文件夹)
  5. TARGET:服务器上需要上传到的文件路径,绝对地址(我的是上传到 /usr/web/html/blog 文件夹下)
  6. 登录 Github,找到你要添加 Actions 的代码仓库,依次填入上述信息
actions 设置图片
name: Publish And Deploy Demo # 显示在 Github Actions 里面的名称

# 监听 master 分支的 push 事件,执行 jobs 里面的内容
on:
  push:
    branches:
      - master

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest # 运行环境,告诉它运行在什么环境
    steps:
      # 第一步:下载源码(CI/CD拉取代码到自己的本地)
      - name: Checkout
        uses: actions/checkout@master # 切换到 master 分支

      # 第二步:添加node环境,不可缺失
      - name: Setup Node.js environment
        uses: actions/setup-node@v2

      # 第三步:打包构建
      - name: Build
        run: npm install && npm run build

      # 第四步:部署到服务器
      - name: ssh deploy
        uses: easingthemes/ssh-deploy@v2.1.6
        env:
          SSH_PRIVATE_KEY: ${{ secrets.KEY }}
          REMOTE_HOST: ${{ secrets.HOST }}
          REMOTE_USER: ${{ secrets.USERNAME }}
          REMOTE_PORT: ${{ secrets.PORT }}
          SOURCE: 'webView/'
          TARGET: '/usr/web/html/blog'

将代码推到 Github 仓库,就会触发自定义的 workflow 并将打包好的代码部署到服务器

actions 成功图片