提交即部署 - Github Action 自动化部署

2021-12-06 13:12:18 浏览数 (1)

文章目录

  • 实现效果
  • 环境
  • 步骤
    • 生成公私钥
    • Github 配置
    • 服务器配置
    • 代码配置
    • 查看日志
  • 参考资料

实现效果

  • 每次在本地开发测试完成后,push 到 Github 后即自动完成部署。
  • 提高效率,自动化节省手动部署的重复性工作。

环境

本地环境:Mac OS 服务器环境:Ubuntu Server

步骤

  • 生成公私钥。
  • Github 配置。
  • 服务器配置。
  • 代码配置。
  • 查看日志。
  • 畅快享受提交即部署。

生成公私钥

  • 本地环境执行生成公私钥的指令。
代码语言:javascript复制
ssh-keygen -m PEM -t rsa -b 4096
  • 输入生成 key 的名称。
代码语言:javascript复制
Enter file in which to save the key (/Users/zero/.ssh/id_rsa):deploy_key
  • 回车,再回车。
  • 生成公私钥成功。

Github 配置

  • 创建项目的 Secrets。Secrets 即在 action 中可以直接引用的变量(经过加密)。
  • 创建 Secrets 变量 - Name: DEPLOY_KEY。用于存储生成的私钥。
    • 本地查看上文生成的私钥。
代码语言:javascript复制
cat ~/.ssh/deploy_key
  • 复制私钥内容到 Secrets 变量 - Value。(注意:BEGIN END 部分同样需要复制)
  • 创建 Secrets 变量 - Name: USERNAME。用于存储登录服务器的用户名。
  • 创建 Secrets 变量 - Name: HOST。用于存储登录服务器的 IP 地址。
  • 最终 Github 上项目 Secrets 变量的结果。

服务器配置

  • 本地查看上文生成的公钥。
代码语言:javascript复制
cat ~/.ssh/deploy_key.pub
  • 在 ssh 授权公钥文件中追加上文生成的公钥。
代码语言:javascript复制
vim ~/.ssh/authorized_keys

代码配置

  • 在代码主目录创建文件夹 .github
  • .github 文件夹中创建文件夹 workflows
  • workflows 文件夹中创建文件 deploy.yml
    • yml 文件中粘贴入如下代码,并更新相应的分支名、部署内容路径、部署位置路径、Django 进程号。(代码中以 master 为例,以自动化部署 Django 项目为例。)
      • 注意代码缩进。
代码语言:javascript复制
name: Depoly Action

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: ssh deploy
      uses: easingthemes/ssh-deploy@v2.1.5
      with:
        REMOTE_HOST: ${{ secrets.HOST }}
        REMOTE_USER: ${{ secrets.USER }}
        SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY }}
        SOURCE: "[部署内容路径(以项目目录为根目录)]"
        TARGET: "[服务器部署位置的绝对路径]"

    - name: Prepare For Django
      uses: webfactory/ssh-agent@v0.5.0
      with:
        ssh-private-key: ${{ secrets.DEPLOY_KEY }}

    - name: Restart Django
      run: ssh ${{ secrets.USER }}@${{ secrets.HOST }} "kill -HUP [Django uwsgi 进程号]"
  • 代码功能解释。
    • 当 git push 到 master 分支时触发以下操作:1. github 虚拟机切换到 master 分支。2. ssh deploy:github 虚拟机通过 ssh 的方式部署项目内容到服务器相应目录。3. Prepare For Django:github 虚拟机将可以访问服务器的私钥放入 ssh-agent 缓存。4. Restart Django:github 虚拟机通过 ssh 的方式执行命令,重启 Django uwsgi 的进程。

查看日志

  • git push 代码到 github。
  • 在 github 项目的 Actions 页面中查看 Action 的运行日志。

参考资料

  • ssh deploy · Actions · GitHub Marketplace

0 人点赞