编写自己的 GitHub Action,体验自动化部署

编写自己的 GitHub Action,体验自动化部署

介绍

GitHub Actions 是 GitHub 提供的一种持续集成和持续部署(CI/CD)工具。它可以让开发者在 GitHub 上定义一系列工作流程,自动化编译、测试、打包和部署代码等任务。GitHub Actions 与 GitHub 平台完全集成,可以直接使用注册在 GitHub Marketplace 的其它 Action,也可以编写自己的 Action,实现自定义的操作流程。

本文将简单介绍如何编写一个自定义的 GitHub Action,来自动部署网站。

为什么使用 GitHub Action 来部署网站?

在云计算时代,使用虚拟主机、云服务器等托管服务作为网站的部署环境已经成为常态。部署过程包括从源代码构建网站、发布到服务器,甚至可以涉及到负载均衡、缓存、CDN 等一系列操作。为了保证每次部署的稳定性和可复现性,通常需要制定一系列严格的部署规范进行管理。

使用传统的部署方式,需要手动进入服务器,使用脚本或者其他工具执行部署命令,操作繁琐,且容易出现人工操作失误。而通过编写 GitHub Action,可以将每次部署自动化完成,大大提高了部署效率,避免了人工操作的错误。同时,GitHub 可以轻松地查看每次部署的记录,方便进行版本管理和错误追踪。

怎样编写自定义的 Action?

准备工作

在 GitHub 上创建一个 Action,需要满足以下几个条件:

  1. GitHub 账号以及任意一个开源代码仓库
  2. 熟悉 Shell 脚本编写
  3. 拥有一个可以接收 Webhook 的服务器(实际上可以使用诸如现有的类似于now.sh的URL)

创建仓库

在 GitHub 上创建仓库,在仓库里新建一个 .github文件夹,文件夹下新建一个 workflows 文件夹。这个文件夹是存放工作流程配置文件的目录。

mkdir -p .github/workflows && touch .github/workflows/main.yml

在工作流程文件中定义一个工作流程

.github/workflows/main.yml 文件中,定义一个运行在 Ubuntu 系统上的 Job。这个 job 需要先 checkout 代码, 然后再执行自定义的命令。

name: Deploy Website
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build and Deploy Website
      run: |
        ssh ${{ secrets.SSH_HOST }} "cd /var/www/html && git pull"

给环境设置需要的机密变量

在使用 SSH 远程连接服务器时,需要提供用户名和密码或秘钥等私密信息。在 GitHub Actions 中,这些信息放在 secrets 中,并且需要在 Setting->Secrets 中设置对应的只读口令。在本例中,我们需要在 GitHub Secret 中设置 SSH_HOST 变量和 SSH_PRIVATE_KEY 变量。这样我们就可以在 workflow 文件中使用这些变量。

SSH_HOST: 192.0.2.0
SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SERVER_PRIVATE_KEY }}

创建一个 SSH key

为了安全起见,需要创建一个只用于自动部署的 key,将其添加到远程服务器的授权文件中。我们还需要为 GitHub Action 创建一个自己的 SSH key,来连接远程服务器进行部署。

ssh-keygen -t rsa -b 4096 -f ./id_rsa -q -N ""

添加SSH key 到服务器

将上一步生成的 id_rsa.pub 文件的内容拷贝到服务器上的授权文件中。需要注意,应该将此授权文件托管在公共代码仓库之外的私有环境下,以便维护安全。

设置工作流程开启条件

在上述配置中,我们已经定义了GitHub Action工作流的名称和必要的步骤。现在,我们需要为工作流定义启动条件。在本例中,我们希望在 main 分支上的 push 事件后自动触发部署流程,所以在 .github/workflows/main.yml 文件中,为运行部署任务的 job 定义了一个 on 触发条件。

如果我们想将 on 设置为手动触发,可以选择使用 workflow_dispatch 触发器,具体请参考 GitHub 文档

如此一来, 当有 push行为,并且分支名称是 main 时,就会触发自动部署。

结束

通过以上步骤,我们可以使用自己编写的 GitHub Action,将网站部署变成自动化的流程,并且可以在 GitHub 中轻松查看部署历史和错误日志。而且,这些部署步骤都可以根据项目的实际情况进行定制和修改,美好的自动化部署,从此变得更加简单高效。

PS: 完整代码的仓库可以参考:https://github.com/lz5zv/ga-example-website-deploy

以上是本文的全部内容,希望本篇文章能够帮助你了解到如何使用 GitHub Action 进行自动化部署。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:编写自己的 GitHub Action,体验自动化部署 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • Highchart基础教程-图表的主要组成

    下面是“Highchart基础教程-图表的主要组成的完整攻略”,包括图表的主要组成、使用方法、两个示例说明等方面。 图表的主要组成 Highchart是一个基于JavaScript的图表库,它可以用来创建各种类型的图表,包括线图、柱状图、饼图等。一个Highchart图表主要由以下几个组成部分: 标题:用于描述图表的主题或主要内容。 坐标轴:用于显示数据的坐…

    other 2023年5月5日
    00
  • 使用filebeat收集日志传输到redis的各种效果展示

    使用filebeat收集日志传输到redis的各种效果展示 在现代化的应用程序中,日志记录是一项非常重要的组成部分。随着应用程序越来越复杂,往往需要监控大量的服务器和应用程序,这就需要我们使用一些高效的工具来帮助我们收集和管理日志。本文将介绍如何使用filebeat将应用程序日志传输到redis,通过一系列的实例展示filebeat的各种效果,帮助读者更好地…

    其他 2023年3月28日
    00
  • MySQL查询条件常见用法详解

    MySQL查询条件常见用法详解 1. 基本查询条件 MySQL中,查询条件用于限制数据的返回结果,常见的基本查询条件有以下几种: 1.1 等于条件(=) 使用等于条件可以精确匹配某个特定值,语法格式如下: SELECT * FROM 表名 WHERE 列名 = 值; 示例: 假设有一个名为users的表,其中有id、name和age三个字段。我们想要查询年龄…

    other 2023年6月28日
    00
  • Java网页数据采集器[中篇-数据存储]

    Java网页数据采集器[中篇-数据存储] 本文将为您提供Java网页数据采集器[中篇-数据存储]的完整攻略,包括数据存储的基本概念、数据存储的方式、以及两个示例说明。 数据存储的基本概念 数据存储是指将采集到的数据保存到本地或远程服务器上,以便后续的数据处理和分析。常用的数据存储方式包括文件存储、数据库存储、以及云存储等。 数据存储的方式 Java网页数据采…

    other 2023年5月6日
    00
  • cmd ren命令 重命名文件(夹)

    下面是关于“cmd ren命令 重命名文件(夹)”的完整攻略,攻略包含以下内容: 什么是ren命令? ren是Command Prompt中的一个命令,它的作用是重命名文件或文件夹,命令格式如下: ren [旧文件(夹)名] [新文件(夹)名] 例如要将文件”test.txt”改名为”newTest.txt”,可以使用以下命令: ren test.txt n…

    other 2023年6月26日
    00
  • 教你如何通过PL/SQL创建序列和触发器实现表自增字段

    下面我详细讲解一下“教你如何通过PL/SQL创建序列和触发器实现表自增字段”的完整攻略。 创建序列 序列是在 Oracle 数据库中生成一系列唯一标识号的一种方法。它通常用于创建自增字段。在 PL/SQL 中,可以通过以下语句创建一个序列: CREATE SEQUENCE sequence_name START WITH 1 INCREMENT BY 1 M…

    other 2023年6月25日
    00
  • FSO操作文件系统

    FSO 操作文件系统 FSO(FileSystemObject)是 VBScript 的一个操作文件系统的组件,它允许你创建、读取、修改、删除等文件和文件夹。在 JavaScript 中,可以通过 ActiveXObject 来引用 FSO 对象。 引用 FSO 对象 var fso = new ActiveXObject("Scripting.F…

    other 2023年6月27日
    00
  • 详解Android中Notification的使用方法

    详解Android中Notification的使用方法 介绍 在Android应用程序中,Notification(通知)是一种用于向用户显示重要信息的方式。它们可以在状态栏中显示图标和文本,并且可以通过点击或滑动来执行操作。本攻略将详细介绍如何在Android应用程序中使用Notification。 步骤 步骤1:创建Notification通知 要创建一…

    other 2023年9月7日
    00
合作推广
合作推广
分享本页
返回顶部