如何使用GitHub Actions自动化部署我们的项目

开发 前端
本篇文章将为大家介绍如何使用 GitHub Actions 来实现我们的代码在服务器上自动部署。

前面我们已经完成了项目的部署,但是每次部署都需要手动操作,过程繁琐又浪费时间。因此,我们需要使用自动化工具来实现自动化部署。本篇文章将为大家介绍如何使用 GitHub Actions 来实现我们的代码在服务器上自动部署。

GitHub Actions

GitHub Actions 是 GitHub 提供的一个自动化工具,可以帮助我们实现自动化部署。它可以在我们的代码仓库中设置一些规则,当我们的代码发生变化时,GitHub Actions 会自动执行这些规则,从而实现自动化部署。

根据我们的项目,我们需要在 GitHub Actions 做的操作很简单:

  1. 连接服务器
  2. 拉取最新代码
  3. 执行 docker 相关命令完成部署(根据你项目本身部署方式来决定)

我们在根目录新建一个 .github/workflows/deploy.yml 文件,在其中设置我们的规则。

name: Deploy Remote Server

on:
  push:
    branches:
      - master # 触发条件的分支,可以根据需要修改

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: xxx
        uses: xxx # 检出代码

      ...  # 写一些规则步骤

通过 SSH 连接阿里云服务器

首先我们要做的是让github Actions可以通过SSH连接到我们的服务器,这样才能在我们服务器是执行相关部署命令。

所以我们需要在服务器上生成一个公钥和一个私钥,然后将公钥添加到服务器的authorized_keys文件中。这样,github Actions就可以通过私钥连接到服务器了。那么,我们如何在阿里云服务器生成公钥和私钥呢?

登录阿里云,进入控制台。

图片

在控制台中找到密钥对,点击创建密钥对输入名称之后点击确定会自动下载一个私钥文件name.pem,记得保存好这个私钥文件。

创建完成之后复制公钥文件的内容。

图片

然后远程连接到我们的服务器实例执行nano ~/.ssh/authorized_keys或者命令,将公钥文件的内容粘贴到authorized_keys文件中(记得是追加到已有文件后面)。此时我们就可以通过私钥连接到服务器了。

图片

然后我们开始配置Github Actions相关参数。进入我们需要部署的 git 仓库,然后配置相关参数SERVER_IP:服务器ip,SSH_USER:服务器用户名,SSH_PRIVATE_KEY:连接服务器私钥(就是我们前面下载的私钥文件的内容)

图片

配置完成之后,我们就可以在deploy.yml通过${{ secrets.SSH_USER }}等等来获取配置的参数了。我们首先测试是否能连接到服务器。

name: TEST SSH

on:
  push:
    branches:
      - master # 触发条件,可以根据需要修改

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2 # 检出代码,包括 deploy.sh 文件

      - name: Deploy to Remote Server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            echo "ssh 连接成功"

然后提交一下代码,去看一下 actions 中的情况。

图片

发现已经连接成功了。点进去也可以看到相关日志信息。

图片

部署代码

接下来我们需要编写部署代码的相关规则了。上面已经提到过只需要三步即可:

  1. 连接服务器
  2. 拉取最新代码 git pull
  3. 执行 docker 相关命令完成部署 sudo docker compose...

我们在deploy.yml中添加如下代码:

name: Deploy to Remote Server

on:
  push:
    branches:
      - master # 触发条件,可以根据需要修改

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Deploy to Remote Server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            set -e # 如果任何命令失败,立即退出
            cd ~/web_server/fs-admin/admin_nest # 进入项目目录
            git pull # 拉取最新代码
            sudo docker compose down --rmi all # 停止并删除所有容器
            sudo docker compose --env-file .env.prod up -d  # 构建并启动容器

注意执行docker compose xxx up的时候需要加上-d让 docker 后台运行,不然会导致github actions会处于一直执行的状态。

我们提交代码,看下日志是否能正常部署。

图片ima

可以看到已经成功部署了,同时后端接口也可以访问通了。后续我们代码有更新的话直接提交到 master 分支即可完成自动部署了,是不是非常方便!

参考资料

[1] https://github.com/qddidi/fs-admin: https://github.com/qddidi/fs-admin

责任编辑:庞桂玉 来源: web前端进阶
相关推荐

2024-01-24 18:50:21

WebFTP服务器

2022-11-15 17:07:40

开发自动化前端

2021-05-13 21:21:50

React应用GitHub

2019-11-26 08:00:00

GitHubGitHub ActiAzure

2021-05-07 08:03:15

微服务JenkinsGitHub项目

2013-11-27 11:34:43

自动化部署Python

2024-02-20 08:08:43

2024-09-13 15:32:18

2022-08-29 20:06:04

楼宇自控物联网

2019-08-12 13:47:41

GitHub代码开发者

2017-10-09 17:52:57

MySQL自动化测试GitHub

2013-03-22 15:15:28

自动化管理部署虚拟化

2021-08-04 08:27:00

VueReact自动化部署

2020-11-25 10:42:57

Python代码工具

2024-11-21 15:24:49

2022-09-08 10:07:48

5G自动化

2015-02-04 09:17:38

亚马逊AWS云自动化

2014-03-11 11:10:10

PowerShell自动化脚本

2019-10-30 14:47:05

工具代码开发

2022-12-21 08:20:01

点赞
收藏

51CTO技术栈公众号