编写自己的 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,需要满足以下几个条件:
- GitHub 账号以及任意一个开源代码仓库
- 熟悉 Shell 脚本编写
- 拥有一个可以接收 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技术站