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

yizhihongxing

编写自己的 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日

相关文章

  • c# 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

    作为网站的作者,我很高兴为您讲解C#自定义值类型如何重写Equals方法才能达到更高的性能和更好的空间管理。 为什么要重写Equals方法 在C#中,值类型变量默认情况下是根据其值进行比较,而引用类型变量则是根据它们所引用的对象(即内存地址)进行比较。 当我们自定义值类型时,如果不重写Equals方法,它会使用默认的Object.Equals方法进行比较,这…

    other 2023年6月25日
    00
  • Service_name 和Sid的区别

    Service_name和Sid的区别 在Oracle数据库中,服务名(Service_name)和系统标识符(Sid)是两个常用的术语。虽然它们在一些情况下可以交替使用,但它们之间有一些关键的区别。 Service_name 服务名是一个逻辑的数据库名,用于唯一标识一个在网络上运行的Oracle数据库实例。它是连接到一个指定数据库的关键参数之一,可通过网络…

    其他 2023年3月28日
    00
  • Spring Boot中单例类实现对象的注入方式

    Spring Boot中单例类实现对象的注入方式 在Spring Boot中,我们可以使用单例类来实现对象的注入。单例类是一种设计模式,它确保在整个应用程序中只有一个实例存在。 以下是实现单例类对象注入的完整攻略: 步骤1:创建单例类 首先,我们需要创建一个单例类,该类负责管理对象的实例。可以使用@Component注解将该类标记为Spring的组件。 示例…

    other 2023年10月15日
    00
  • Fedora21源配置与显卡安装

    Fedora 21源配置与显卡安装的完整攻略 Fedora 21是一款基于Linux的操作系统,本文将详细讲解如何配置Fedora 21的软件源和安装显卡驱动,包括两个示例说明。 配置软件源 配置软件源是安装软件的前提,Fedora 21默认使用DNF包管理器,可以通过修改/etc/yum.repos.d目录下的配置文件来配置软件源。 以下是一个示例说明: …

    other 2023年5月5日
    00
  • Kotlin类的继承实现详细介绍

    Kotlin类的继承实现详细介绍 在 Kotlin 中,类的继承通过 : ParentClass() 这种方式实现,其中 ParentClass 表示父类名。 基本继承 一个子类继承于单个父类: // 定义一个父类 open class ParentClass { open fun printMessage() { println("这是父类的信息…

    other 2023年6月26日
    00
  • 无线路由器最好多久重启一次及无线路由器怎么重启

    关于无线路由器重启问题,我可以提供如下完整攻略: 一、 为什么要重启无线路由器 在使用无线路由器一段时间后,由于种种原因(如缓存积累、配置问题等),可能会导致路由器运行出现异常,如WiFi不稳定,设置变更无效等问题。这时重启路由器可以有效缓解这些问题,恢复路由器正常运行状态,提高网络速度和稳定性。此外,定期重启还可以避免路由器长时间运行导致硬件受损。 二、多…

    other 2023年6月27日
    00
  • 你该知道的Gradle配置知识总结

    你该知道的Gradle配置知识总结 Gradle是一种强大的构建工具,用于构建和管理项目。在本攻略中,我们将详细讲解一些你应该知道的Gradle配置知识,并提供两个示例说明。 1. Gradle配置文件 Gradle使用Groovy或Kotlin编写的配置文件来定义项目的构建逻辑。常见的配置文件包括: settings.gradle:用于配置项目的设置和包含…

    other 2023年10月13日
    00
  • Python理解递归的方法总结

    Python理解递归的方法总结 什么是递归? 递归是指函数直接或间接调用自身的一种技巧。递归函数在调用过程中将参数不断地传递下去,并在每一层的函数调用中去解决更小规模的问题,直至到达某个基础情况,然后返回结果,最终建立一个递归结构的处理方式。 递归在一些编程问题中有很好的应用,例如在算法、数学等领域。学习递归的方法可以帮助我们更好地掌握 Python 编程语…

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