灏天阁

GitHub 自动化部署详解

· Yin灏

GitHub 自动化部署是指将源代码从 GitHub 仓库自动部署到生产环境中的一种方法,它可以在开发人员提交代码时自动构建、测试和部署应用程序。这项技术在现代软件开发中越来越受欢迎,因为它可以减少手动操作并提高工作效率。

  1. 以下是一个简单的步骤,以帮助您进行自动化部署:

  2. 创建一个 Github 仓库,并将你的应用程序的源代码上传到该仓库中。

  3. 在你的本地机器上安装 Git,并将本地仓库克隆到本地。

  4. 创建一个 CI/CD pipeline,该 pipeline 将负责自动构建、测试和部署你的应用程序。

  5. 在你的项目根目录下添加一个 YAML 文件(.yml),名为.github/workflows/main.yml,这个文件定义了你的 CI/CD 流程。该文件应包含以下内容:

  • main.yml
name: CI/CD Pipeline #工作流名称

on:
  push: #表示 push 的时候触发工作流
    branches:
      - main #触发的分支

jobs: #工作流程包含的作业(jobs)列表
  build-and-deploy: #作业名称
    runs-on: ubuntu-latest #指定作业在哪种操作系统环境下运行。此处使用的是最新版的 Ubuntu 操作系统

    steps: #作业中包含的步骤列表
      - name: Checkout code #第一个步骤的名称
        uses: actions/checkout@v2 #用来检出代码

      - name: Set up Node.js environment #设置 Node.js 环境的步骤
        uses: actions/setup-node@v2 #用来设置 Node 环境
        with:
          node-version: "12.x" #指定 Node 版本

      - name: Install dependencies #安装依赖项的步骤
        run: npm install #安装依赖项

      - name: Build and test #构建和测试应用程序的步骤
        run: npm run build #使用 npm 运行构建和测试命令

      - name: Deploy to production #部署应用程序的步骤
        uses: easingthemes/ssh-deploy@v2.2.14 #使用 SSH 部署工具来进行自动化部署
        env: #设置环境变量,包括 SSH 私钥、远程服务器 IP 地址、用户名等信息
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} #SSH 私钥
          ARGS: "-rltgoDzvO --delete" #传输配置参数
          SOURCE: "dist/" #要上传到远程服务器的本地文件和路径
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }} #远程服务器的 IP 地址或域名
          REMOTE_USER: ${{ secrets.REMOTE_USER }} #远程服务器的用户名
          TARGET: "/var/www/html" #上传到远程服务器的目标路径

这个流程的作用是:

  • 当你推送提交到 GitHub 的主分支(main)时,触发 CI/CD 流程;
  • 通过 actions/checkout 步骤,将代码从 GitHub 检出到 CI/CD 流程中;
  • 使用 actions/setup-node 步骤,在 CI/CD 流程中设置 Node.js 环境;
  • 使用 npm install 安装所有依赖项;
  • 运行 npm run build 命令来构建和测试应用程序;
  • 使用 easingthemes/ssh-deploy 步骤将构建后的文件部署到生产环境。
  1. 将 SSH 私钥和主机名存储在你的 GitHub 仓库的 secrets 中,以便 CI/CD 流程可以访问这些敏感信息。确保添加以下 secrets:
  • SSH_PRIVATE_KEY:包含用于连接到远程服务器的 SSH 私钥。
  • REMOTE_HOST:远程服务器的 IP 地址或主机名。
  • REMOTE_USER:远程服务器的用户名。
  1. 提交并推送改动到 GitHub 仓库中,此时 CI/CD 流程应该已自动运行,并将应用程序部署到生产环境中。

yml 文件解析

这个文件是一个 GitHub Actions 的工作流程(workflow)文件,它定义了自动化部署的 CI/CD 流程。下面是对每个步骤的解释:

  1. name: CI/CD Pipeline:工作流程的名称。

  2. on: push: branches: - main:触发工作流程的事件。当你向名为“main”的分支推送提交时,将触发此工作流程。

  3. jobs::工作流程包含的作业(jobs)列表。

  4. build-and-deploy::作业的名称。

  5. runs-on: ubuntu-latest:指定作业在哪种操作系统环境下运行。此处使用的是最新版的 Ubuntu 操作系统。

  6. steps::作业中包含的步骤(steps)列表。

  7. - name: Checkout code:第一个步骤的名称。使用actions/checkout@v2来检出代码。

  8. - name: Set up Node.js environment:设置 Node.js 环境的步骤。

  9. node-version: '12.x':指定 Node.js 版本为 12.x。

  10. - name: Install dependencies:安装依赖项的步骤。

  11. run: npm install:使用 npm 安装所有依赖项。

  12. - name: Build and test:构建和测试应用程序的步骤。

  13. run: npm run build:使用 npm 运行构建和测试命令。

  14. - name: Deploy to production:部署应用程序的步骤。

  15. uses: easingthemes/ssh-deploy@v2.2.14:使用 SSH 部署工具来进行自动化部署。

  16. env::设置环境变量,包括 SSH 私钥、远程服务器 IP 地址、用户名等信息。

  17. SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}:SSH 私钥。

  18. ARGS: '-rltgoDzvO --delete':传输配置参数。

  19. SOURCE: 'dist/':要上传到远程服务器的本地文件和路径。

  20. REMOTE_HOST: ${{ secrets.REMOTE_HOST }}:远程服务器的 IP 地址或域名。

  21. REMOTE_USER: ${{ secrets.REMOTE_USER }}:远程服务器的用户名。

  22. TARGET: '/var/www/html':上传到远程服务器的目标路径。

这些步骤组成了一个简单的 CI/CD 流程,用于将代码构建、测试和部署到生产环境中。你可以根据自己的需求修改这个文件,并使用它来实现自动化部署。

注意:

需要购买服务器吗?

为了进行远程部署,你需要购买一个服务器来托管你的应用程序。通常有以下几种方式可以购买服务器:

  1. 在云服务商(如 AWS、Azure、Google Cloud 等)上租用一台虚拟机。这个选项非常灵活,可以根据需要随时增加或减少资源。但是,它可能会比其他选项更贵。

  2. 在托管服务商(如 DigitalOcean、Linode 等)上购买一台物理服务器。这个选项相对来说更便宜,但需要自行管理服务器。

  3. 在自己的网络中运行服务器。这个选项需要在家里或办公室中设置一台物理服务器,并通过路由器将其连接到互联网。

无论选择哪种方式,服务器都是进行远程部署所必需的。

GitHub 对 push 的代码的处理流程

GitHub 本身并不负责将代码发送到远程服务器上。相反,GitHub 用于存储你的源代码,并提供了一些工具和服务来帮助你协作开发和管理代码。

当你使用 GitHub 自动化部署时,你需要使用 CI/CD 流程来自动构建、测试和部署你的应用程序。在这个过程中,GitHub 只是一个触发器,负责启动 CI/CD 流程,并让它自动运行。具体来说,当你向 GitHub 仓库推送提交时,GitHub 会检测到这个事件,并根据你定义的工作流自动触发 CI/CD 流程。

在 CI/CD 流程中,你可以使用各种工具和服务来构建、测试和部署你的应用程序。最终,你需要使用 SSH 或其他协议,将构建好的应用程序包发送到远程服务器上。为此,你需要在 GitHub 仓库的 secrets 中存储远程服务器的 IP 地址、用户名和 SSH 私钥等敏感信息,并在 CI/CD 流程中使用这些信息来连接到远程服务器并将代码部署到其中。

总而言之,GitHub 自动化部署的实现依赖于 CI/CD 流程和远程部署技术,GitHub 本身并不直接参与到部署过程中去。

GitHub 构建之后,发送到远程服务器的文件有哪些?

在 CI/CD 流程中,你需要将构建好的应用程序包发送到远程服务器上。这个应用程序包通常包含以下内容:

可执行文件:如果你的应用程序是一个可执行文件(如 Node.js 应用程序或 Python 脚本),则需要将其打包为二进制文件,并将其发送到远程服务器上。

静态文件:如果你的应用程序包含静态文件(如 HTML、CSS 或 JavaScript 文件),则需要将其复制到远程服务器上的 Web 根目录下,以便可以通过浏览器访问它们。

依赖项:如果你的应用程序依赖于其他软件库或模块,则需要将这些依赖项打包并一同发送到远程服务器上。

具体来说,应用程序包的内容取决于你的应用程序类型和需求。但是,无论你的应用程序是什么类型,你都需要确保在 CI/CD 流程中正确地构建和打包应用程序,并使用 SSH 或其他协议将应用程序包发送到远程服务器上。

- Book Lists -