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

相关文章

  • php 错误处理经验分享

    PHP 错误处理经验分享 引言 在开发过程中,处理错误是一个非常重要的环节。良好的错误处理能够帮助我们快速定位和解决问题,提高代码的健壮性和稳定性。本文将分享一些关于 PHP 错误处理的经验和技巧。 错误处理原则 日志记录:对于发生的错误,要及时记录到日志中,以便后续排查和分析。 友好提示:给用户一个友好的错误提示信息,避免展示敏感信息或过于技术性的错误信息…

    other 2023年6月28日
    00
  • C语言指针引用数组案例讲解

    C语言指针引用数组案例讲解 案例背景 在C语言的程序中,常常需要使用指针和数组来进行数据操作,而指针可以引用数组,达到遍历数组,修改数组元素等目的。本文将通过两个示例说明指针引用数组的案例,为读者展示指针与数组的配合使用。 示例一:数组的遍历 在C语言程序中,可以使用指针引用数组来遍历数组中的元素。以下代码演示了指针引用数组遍历的实现过程: #include…

    other 2023年6月25日
    00
  • 什么是服务器

    什么是服务器 服务器是指在网络中接受其他设备请求并提供服务的计算机。它可以是一台物理机器,也可以是一组虚拟机。在一个网络中,有许多不同种类的服务器,像是Web服务器、邮件服务器、数据库服务器等等。 服务器的作用 服务器的作用很多,其中最常见的应用包括: 存储和管理数据:服务器通常会有更大的储存空间,可以用来存储和管理数据。 提供服务:服务器主要被用来提供服务…

    其他 2023年4月16日
    00
  • java使用Validation进行数据校验的方式总结

    Java使用Validation进行数据校验的方式总结 Java提供了一种方便的数据校验框架——Validation,它可以帮助开发人员轻松地对数据进行校验和验证。以下是使用Validation进行数据校验的方式的详细攻略: 1. 添加依赖 首先,需要在项目的构建文件中添加Validation的依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖…

    other 2023年10月17日
    00
  • css样式底部平均分布

    CSS样式底部平均分布 在网站开发过程中,我们经常需要将一排元素展示在页面底部,比如页脚链接、社交媒体图标等等。而如果我们希望这些元素在底部平均分布,应该怎么做呢? 下面,我们来介绍一种简单易用的CSS样式,可以轻松地实现底部元素平均分布的效果。 使用Flex布局 CSS3引入的弹性盒子布局(Flexbox)为我们提供了更加便捷的布局方式。下面的代码片段展示…

    其他 2023年3月28日
    00
  • idea 创建properties配置文件的步骤

    下面是详细的“idea 创建properties配置文件的步骤”的攻略: 1. 新建properties配置文件 在项目的源代码目录(比如src/main/resources)下,右键点击鼠标,选择New -> File,然后在弹出的对话框中输入文件名,并且在后缀名处输入“.properties”(注意前面的点号),最后点击Ok即可创建一个空的prop…

    other 2023年6月25日
    00
  • PHP获取客户端真实IP地址的5种情况分析和实现代码

    PHP获取客户端真实IP地址的5种情况分析和实现代码 在PHP中,获取客户端真实IP地址是一个常见的需求。然而,由于网络环境的复杂性,有时候获取真实IP地址并不是一件简单的事情。下面将详细讲解5种情况下获取客户端真实IP地址的方法,并提供相应的实现代码。 1. 获取$_SERVER中的REMOTE_ADDR $ip = $_SERVER[‘REMOTE_AD…

    other 2023年7月30日
    00
  • Python类继承和多态原理解析

    Python类继承和多态原理解析 在Python中,类继承和多态是面向对象编程的两个核心概念,它们为我们构建更加灵活高效的程序提供了便捷的途径。下面我们将详细讲解Python类继承和多态的原理和使用方法。 类继承 类继承是指一个类可以继承自另一个类的属性和方法,继承自另一个类的类称为子类,被继承的类称为父类或基类。子类可以在不修改父类的情况下增加或修改自己的…

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