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

相关文章

  • PostgreSQL 如何修改文本类型字段的存储方式

    要修改 PostgreSQL 数据库中的文本类型字段的存储方式,需要运行 ALTER TABLE 命令并指定要修改的列名和新的存储类型。 具体步骤如下: 首先,使用 psql 或其他 PostgreSQL 客户端连接到要修改的数据库。 然后,确定要修改的表和列名。例如,我们要将表 mytable 中的列 mycolumn 的存储类型修改为 TEXT: ALT…

    other 2023年6月25日
    00
  • fastDFS文件服务器迁移

    FastDFS是一个开源的轻量级分布式文件系统,它具有高性能、高可靠性、易部署等特点。在实际应用中,可能需要将FastDFS文件服务器迁移到新的服务器上。本文将提供一个完整的攻略,包括备份数据、安装配置新服务器、迁移数据等步骤,并提供两个示例说明。 备份数据 在迁移FastDFS文件服务器之前,需要备份数据以防止数据丢失。可以使用FastDFS提供的工具进行…

    other 2023年5月5日
    00
  • css样式重写

    CSS样式重写 在网站开发中,我们经常会遇到需要修改现有样式的场景,有些时候我们需要直接修改原有的样式,但这种方式并不优雅且容易引起样式冲突。针对这种情况,我们可以使用CSS样式重写的方式解决该问题。 什么是CSS样式重写 CSS样式重写是指修改一个已经存在的CSS样式,让它适应当前对我们所需的样式需求的一种技术。具体的实现方式是,定义新的CSS样式,并用新…

    其他 2023年3月28日
    00
  • Python 变量类型及命名规则介绍

    Python 变量类型及命名规则介绍 Python 是一种动态类型语言,它允许我们在不声明变量类型的情况下直接使用变量。在 Python 中,变量是用来存储数据的容器。在本攻略中,我们将详细介绍 Python 中的变量类型以及命名规则。 变量类型 Python 中有多种变量类型,包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)和…

    other 2023年8月9日
    00
  • 关于uiscollview中的contentoffset的理解

    关于UIScrollView中的contentOffset的理解 UIScrollView是iOS开发中常用的控件之一,它可以滚动显示内容。contentOffset是UIScrollView的一个属性,表示UIScrollView的内容视图在UIScrollView坐系的移量。本文将详细讲解contentOffset的理解,并提供两个示例说明。 1. co…

    other 2023年5月7日
    00
  • 浅谈Gradle 常用配置总结

    浅谈Gradle 常用配置总结 Gradle 是一种基于 Groovy 的构建工具,用于构建和管理项目。在使用 Gradle 进行项目构建时,我们可以通过配置文件来定义项目的构建过程和行为。本文将详细讲解 Gradle 的常用配置,包括项目结构、依赖管理、任务配置等内容。 1. 项目结构 在 Gradle 中,项目结构是通过目录结构来定义的。一般情况下,一个…

    other 2023年8月3日
    00
  • 在go中使用http.newrequest处理错误

    在Go中使用http.NewRequest处理错误 在Go中,我们可以使用http.NewRequest函数创建HTTP请求。但是,如果我们不小心处理错误,可能会导致程序崩溃或出现其他问题。本攻略将介绍何在Go中使用http.NewRequest处理错误,并提供两个示例。 处理错误 在Go中,我们可以使用http.NewRequest函数创建请求。该函数返回…

    other 2023年5月9日
    00
  • 苹果发布OS X Yosemite DP6第六个开发者预览版 OS X 10.10更新内容介绍

    苹果发布OS X Yosemite DP6第六个开发者预览版 今年6月,苹果公司在其全球开发者大会(WWDC)上发布了 Yosemite操作系统的beta版。这个夏天以来,苹果已经发布了5个开发者预览版,最近又发布了DP6预览版。 OS X Yosemite 10.10 更新内容介绍 以下是OS X Yosemite DP6预览版的一些重要更新内容: Spo…

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