郭卫东 发表于 4 天前

使用 GitHub Actions 摆设到开发服务器的详细指南

使用 GitHub Actions 摆设到开发服务器的详细指南

在本篇博客中,我们将介绍怎样使用 GitHub Actions 实现自动化摆设,将代码从 GitHub 仓库的 dev 分支自动摆设到开发服务器。通过这种方式,可以确保每次在 dev 分支推送代码时,服务器上的代码会自动更新,为开发和测试带来极大的便利。
前置条件

在开始之前,请确保以下条件已经满意:

[*]GitHub 仓库配置:仓库中必要一个名为 dev 的分支。
[*]SSH 配置:必要一个 SSH 私钥用于登录到服务器,并将其配置为 GitHub 仓库的秘密变量(比方,SSH_PEM_KEY)。
[*]服务器配置:服务器上已经配置了用于摆设的用户(如 www),而且该用户有权限更新代码。
配置服务器的相干信息到Github仓库



[*]找到项目中的 Settings -> General -> Security -> Actions 点击 New repository secret添加一个新的环境变量
[*]Name 写自己配置相干的名称(后面会配置到Github Action当中)
[*]Secret则写Name相对应的值
[*]我这里配置了三个值,分别为:

[*]SERVER_ADDRESS 服务器地址
[*]SERVER_USER 服务器登录用户名
[*]SSH_PEM_KEY 登录使用的密钥文件内容

https://i-blog.csdnimg.cn/direct/7ecad028762c4e7b9b52445ccac49585.png
后端自动拉取 工作流

在你的项目根目录下,创建 .github/workflows/deploy-dev.yml 文件,内容如下:


[*]deploy-dev.yml 为按照自己使用场景命名
name: Deploy to Dev Server

on:
push:
    branches:
      - dev

jobs:
deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Code
      uses: actions/checkout@v3

      - name: Add SSH Key
      run: |
          echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
          chmod 600 deploy_key.pem

      - name: Run deployment script over SSH
      uses: appleboy/ssh-action@master
      with:
            host: ${{ secrets.SERVER_ADDRESS }}
            username: ${{ secrets.SERVER_USER }}
            key_path: deploy_key.pem
            script_stop: true
            script: |
            sudo -u www bash -c '
            cd /www/test-project
            git pull origin dev'
   
      - name: Cleanup
      run: rm -f deploy_key.pem
接下来,我们将对上述代码逐行进行详细表明。
配置文件布局



[*]name: 界说工作流的名称。在 GitHub Actions 界面中显示为 “Deploy to Dev Server”。
[*]on: 指定触发条件。这里配置为 push 到 dev 分支时触发工作流。
作业配置 (jobs)



[*]deploy: 界说一个名为 deploy 的作业,表示执行实际的摆设过程。
[*]runs-on: 指定运行环境,ubuntu-latest 表示使用最新的 Ubuntu 体系作为虚拟环境。
步调配置 (steps)

每个步调代表自动化任务中的一个执行单元,按顺序依次执行。
1. Checkout Code

- name: Checkout Code
uses: actions/checkout@v3


[*]作用:从 GitHub 仓库中检出代码。
[*]说明:该步调会将 dev 分支的代码拉取到 GitHub Actions 虚拟机中,为后续步调做好准备。
2. Add SSH Key

- name: Add SSH Key
run: |
    echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
    chmod 600 deploy_key.pem


[*]作用:将存储在 GitHub Secrets 中的 SSH 私钥写入文件 deploy_key.pem 中,并将文件权限设置为 600(只有文件拥有者有读写权限)。
[*]说明:GitHub Secrets 存储的敏感信息可以通过 ${{ secrets.<VARIABLE_NAME> }} 引用。这里的 SSH_PEM_KEY 包罗服务器的私钥信息,用于后续的 SSH 毗连。
3. Run deployment script over SSH

- name: Run deployment script over SSH
uses: appleboy/ssh-action@master
with:
      host: ${{ secrets.SERVER_ADDRESS }}
      username: ${{ secrets.SERVER_USER }}
      key_path: deploy_key.pem
      script_stop: true
      script: |
      sudo -u www bash -c '
      cd /www/test-project
      git pull origin dev'


[*]作用:通过 SSH 毗连到远程服务器并执行摆设命令。
[*]说明:

[*]host:服务器地址,保存在 GitHub Secrets 中(如 SERVER_ADDRESS)。
[*]username:用于登录服务器的用户名(如 SERVER_USER)。
[*]key_path:私钥文件的路径,指定为刚才创建的 deploy_key.pem。
[*]script_stop:设置为 true,表示如果 SSH 脚本执行中发生错误,会制止整个工作流。
[*]script:SSH 会话中执行的具体命令。

[*]sudo -u www bash -c ‘…’:切换到 www 用户执行脚本,以确保文件的全部者精确。
[*]git pull origin dev:从远程仓库的 dev 分支拉取最新代码,更新服务器端代码。


4. Cleanup

- name: Cleanup
run: rm -f deploy_key.pem


[*]作用:删除 SSH 私钥文件,防止在后续步调或其他作业中被意外走漏。
[*]说明:安全性考虑,这一步非常紧张,防止密钥文件在虚拟机中遗留。
自动化前端构建工作流

name: Deploy to Dev Server

on:
push:
    branches:
      - dev

jobs:
deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Code
      uses: actions/checkout@v3

      - name: Add SSH Key
      run: |
          echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
          chmod 600 deploy_key.pem

      - name: Run deployment script over SSH
      uses: appleboy/ssh-action@master
      with:
            host: ${{ secrets.SERVER_ADDRESS }}
            username: ${{ secrets.SERVER_USER }}
            key_path: deploy_key.pem
            script_stop: true
            script: |
            sudo -u www bash -c '
            cd /www/test-project
            git pull origin dev
            npm install
            npm run build'

      - name: Cleanup
      run: rm -f deploy_key.pem
详细说明



[*]我们在 GitHub Actions 工作流中增长了自动安装依赖和构建前端项目的步调。

[*]npm install:在拉取最新代码后自动安装项目的全部依赖包。
[*]npm run build:安装完依赖后,执行前端项目的构建命令,生成打包后的文件。

在原有的摆设流程上,我们扩展了前端代码的自动化构建,以便每次在 dev 分支推送更新后,GitHub Actions 自动完成以下任务:


[*]拉取代码:将最新代码更新到服务器。
[*]安装依赖:使用 npm install 自动安装前端项目的依赖。
[*]执行构建:运行 npm run build 构建打包文件,确保服务器始终运行最新的前端版本。
这种工作流可以或许确保前端和后端代码在服务器上保持同步且自动化地更新和构建,避免了在本地打包后上传造成的开发环境不同等导致运行出现Bug等题目。
进一步优化



[*]配置自动关照:可以添加 GitHub Actions 的关照功能,配置为每次摆设完成后自动关照开发者团队。可以通过 飞书、钉钉、邮件等集成方式实现。
结语



[*]通过 GitHub Actions 和 SSH 摆设,极大地简化了开发流程中的摆设环节,淘汰了手动操纵,降低了人为错误的风险。
[*]更多配置场景可参考这篇Github文章

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用 GitHub Actions 摆设到开发服务器的详细指南