前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Github Action自动化部署

使用Github Action自动化部署

作者头像
愧怍
发布于 2022-12-27 12:35:38
发布于 2022-12-27 12:35:38
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

如果有写过项目的经历,就免不了将代码上传到服务器上,安装依赖,然后输入启动命令的步骤。但是有的项目往往需要经常性的改动,如果还是照着上面的方式进行部署的话。先不说这样操作的效率,操作个几次就想罢工了。并且上面这样操作的往往容易误操作。而 Github Actions 正是该问题的良药。

介绍

Github Actions 是 Github 提供的免费自动化构建实现,特别适用于持续集成和持续交付的场景,它具备自动化完成许多不同任务的能力,例如构建、测试和部署等等。

概念

在进行操作前,先对 Github Actions 基础知识进行补充,具体可查看 GitHub Actions 入门教程 阮一峰

可以在 GitHub Marketplace · Actions to improve your workflow 中找到所有的 Actions。

实例:将 VIte 项目发布到 GitHub Pages

第一步:创建一个 Vite 工程,可在官网中查看如何安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pnpm create vite

选择对应的项目名(vite-project)与模板(vue-ts)

第二步:打开package.json文件,加一个homepage字段,表示该应用发布后的根目录(参见官方文档)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"homepage": "https://[username].github.io/vite-project",

上面代码中,将[username]替换成你的 GitHub 用户名。

第三步:在这个仓库的.github/workflows目录,生成一个 workflow 文件,名字可以随便取,这个示例是ci.yml

workflow 文件如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: Build and Deploy
on:
  push:
    branches:
      - master
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install and Build
        run: |
          yarn install
          yarn run build

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.ACCESS_TOKEN }}
          publish_dir: ./dist

上面这个 workflow 文件的要点如下

  1. 整个流程在master分支发生push事件时触发。
  2. 只有一个job,运行在虚拟机环境ubuntu-latest
  3. 第一步是获取源码,使用的 action 是actions/checkout
  4. 第二步是安装依赖与构建,yarn installyarn run build
  5. 第三步是部署到 Github Page 上,使用的 action 是 peaceiris/actions-gh-pages@v3。其中需要设置 secrets.ACCESS_TOKEN

第四步:将项目上传置 Github 仓库中,

该 peaceiris/actions-gh-pages 支持三种 Token,这里使用 personal_token,其生成教程在官方文档中有详细图文,这里就不贴其生成的图了。不过记得权限过期以及勾选上 workflow

Tip

token 只会在生成的时候显示一次,如需要再次显示,则可以点击,但使用此令牌的任何脚本或应用程序都需要更新!

然后在Settings -> Secrets -> Actions 中 New repository secret中便可添加 secret。

这时候只要一调用 git push,就会触发对应的 workflows 文件配置。点击 Actions 便可看到 jobs 工作。

此时访问https://kuizuo.github.io/vite-project就可呈现vite项目(不过我已经把仓库给关闭了),但进入会白屏,控制台提示

很显然,需要静态资源请求的路径错了,正确的应该是https://kuizuo.github.io/vite-project/assets/index.2435d274.js,根据Vite中的[构建生产版本](https://www.vitejs.net/guide/build.html#public-base-path) 通过命令行参数 --base=/vite-project/

稍加操作在 Install and Build 加上 base 参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      - name: Install and Build
        run: |
          yarn install
          yarn run build --base=/vite-project/

git push 后,稍等片刻再次访问便可得到如下页面

FTP发布到自有服务器上

那么现在在 Github Page 上搭建好了,但还要将编译后的文件还可以通过 FTP 协议添加自己的服务器上,这里我就以我的博客为例。

在服务器中开启 FTP,并添加一个用户名,密码以及根目录(这里我问选择为项目目录)

workflow 要做的就是新建一个 steps,这里选用 FTP-Deploy-Action,以下是我的完整配置内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: FTP Deploy

on: [push]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js 16
        uses: actions/setup-node@v3
        with:
          node-version: '16.x'

      - name: Build Project
        run: |
          yarn install
          yarn run build

      - name: FTP Deploy
        uses: SamKirkland/FTP-Deploy-Action@4.0.0
        with:
          server: ${{ secrets.ftp_server }}
          username: ${{ secrets.ftp_user }}
          password: ${{ secrets.ftp_pwd }}
          local-dir: ./build/
          server-dir: ./

相信第一个实例中的 workflow 应该已经明白了,其中 ftp_server,ftp_user,ftp_pwd 都是私密信息,所以需要 New repository secret 设置这三个变量。

但由于 build 下存在大量文件夹与文件,所以 FTP 速度上传速度堪忧,最终耗时 17 minutes 38.4 seconds。这里只是作为 FTP 演示。

SCP发布到自有服务器上

FTP 传输文件着实过慢,所以可以通过 SCP 的方式来传输文件,这里用到了ssh deploy · Actions,以下是示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: ci

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js 16
        uses: actions/setup-node@v3
        with:
          node-version: '16.x'

      - name: Build Project
        run: |
          yarn install
          yarn run build

      - name: SSH Deploy
        uses: easingthemes/ssh-deploy@v2.2.11
        env:
          SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
          ARGS: '-avzr --delete'
          SOURCE: 'build'
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          REMOTE_USER: 'root'
          TARGET: '/www/wwwroot/blog'

其中 PRIVATE_KEY 为服务器SSH登录的私钥,REMOTE_HOST 就是服务器的ip地址。当然,这些参数也都作为私密信息,也是要通过New repository secret来设置的。

总结

从上面的演示便可看出 Github Actions 的强大,但其实我挺早之前就了解到它能做这些事情,但迟迟没有动手尝试一番,因为这些自动化操作用人工也是能完成的。也许当时的我认为,用人工所花费的时间远比自动化操作的学习时间来的长,可又随着自己的个人应用增加,每次都需要手动发布,而此时前者的时间已远远大于后者,所以才会想去学习。

明知该技术是一定会接触的,为何不趁现在去了解学习呢?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【算法/学习】双指针
双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。如果两个指针方向相反,则称为「对撞指针」。如果两个指针方向相同,则称为「快慢指针」。如果两个指针分别属于不同的数组 / 链表,则称为「分离双指针」。
IsLand1314
2024/10/15
1220
【算法/学习】双指针
双指针技巧直接秒杀五道算法题
本文是一两年前发过的 一篇文章,当时没多少人看,现在由于账号迁移的原因公众号里都搜索不到了,我就重新加工了一下,并且添加了新内容,直接套双指针技巧秒杀 5 道算法题。
labuladong
2021/09/23
3090
数组双指针直接秒杀七道题目
所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。
labuladong
2022/03/30
5330
数组双指针直接秒杀七道题目
名词解释-双指针算法
其实双指针算法,并不是一种具体的公式或者范式。而是一种思路。一种节省时间运算的思路。
zinyan.com
2023/07/14
2150
名词解释-双指针算法
算法笔记(一)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
chuckQu
2022/08/19
6270
前端学数据结构与算法(十二):有趣的算法 - 多指针与滑动窗口
如果说如何用算法高效有趣的解决某些问题,那多指针和滑动算法绝对是算其中的佼佼者。这也是笔者最初接触算法时觉得最有意思的一点,因为解决的问题是熟悉的,但配方却完全不同,本章我们从一个简单的交集问题出发,一步步的认识到多指针及滑动窗口解决某些问题时的巧妙与高效,本章主要以解LeetCode里高频题为参考~
飞跃疯人院
2020/11/19
5960
七日算法先导(二)——双指针
其中这个最小元素为啥要初始化为nums[0],简单的来说我们是从左到右遍历数组的,nums[i]每次减minS,假设minS初始化为其他值,那么可能出现跳过第一个值或者初始值不在数组中的情况
秋名山码神
2022/12/13
1970
LeetCode通关:数组十七连,真是不简单
数组基本上是我们最熟悉的数据结构了,刚会写“Hello World”不久,接着就是“杨辉三角”之类的练习。
三分恶
2021/08/10
3960
双指针/滑动窗口/移动队列
Never stop learning, beacuse life never stops teaching. 不要停止学习, 因为人生总有东西可教 there is always more you don`t know. 无重复字符最长子串 双指针/滑动窗口/移动队列 无重复字符最长子串 package cn.com.codingce.aaclengthoflongestsubstring; import java.util.Arrays; import java.util.HashMap; impor
后端码匠
2021/08/20
4940
七十三、从三数之和探究双指针思想
双指针是一种解决问题的技巧或者思维方式,指在访问一个序列中的数据时使用两个指针进行扫描,两个指针可以是同向的,也可以是反向的。
润森
2022/08/17
8110
七十三、从三数之和探究双指针思想
一、基础数据结构
1、当移动<font style="color:rgb(233, 105, 0);background-color:rgb(248, 248, 248);">right</font>扩大窗口,即加入字符时,应该更新哪些数据?
阿东知识库1
2024/09/03
1750
一、基础数据结构
【算法题】从0培养算法思想——双指针篇
• 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼
小皮侠
2024/04/08
1300
【算法题】从0培养算法思想——双指针篇
九十六、双指针和滑动窗口算法模板
在四种二分变种中,根据王争算法专栏中,写死low = 0,high = len(list) - 1。循环条件low <= high。往左移动high = mid - 1,往右移动low = mid + 1
润森
2022/08/18
2450
九十六、双指针和滑动窗口算法模板
【双指针算法】——还不会双指针?看这里一篇就能让你明白其中的奥妙
https://leetcode.cn/problems/move-zeroes/
用户11286421
2024/10/11
4090
【双指针算法】——还不会双指针?看这里一篇就能让你明白其中的奥妙
leetcode 双指针算法专题
双指针是一种方法,一种思想一种技巧,也谈不上什么特别的算法,在二分查找中经常使用这个技巧,具体就是用两个变量动态的存储两个或者多个的结点,来方便我们进行一些操作,通常使用在线性结构中,比如说数组或者是链表。 在我们遇到像数组,链表这类数据结构的算法题目的时候,应该要想得到双指针的来解决问题。特别是链表类的题目,经常需要用到两个或多个指针配合来记忆链表上的节点,完成某些操作。链表这种数据结构也是树形结构和图的原型,所以有时候在关于图和树形结构的算法题目中也会用到双指针。
Albert_xiong
2021/06/21
5510
leetcode 双指针算法专题
什么时候可以用双指针,该咋用?
双指针是我们做题中经常用到的思想,所以这个思想在刷题初期是一定要会的。其实我们早就学习过这个方法,那就是我们在学习数据结构的二分查找,下面我们通过二分查找来描述一下这个思想。
灵魂画师牧码
2020/11/06
1.1K0
什么时候可以用双指针,该咋用?
写给前端的算法进阶指南,我是如何两个月零基础刷200题
最近国内大厂面试中,出现 LeetCode 真题考察的频率越来越高了。我也观察到有越来越多的前端同学开始关注算法这个话题。
前端迷
2020/07/22
9250
写给前端的算法进阶指南,我是如何两个月零基础刷200题
力扣刷题(数组篇)
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)  小王的主页:(14条消息) 学好c语言的小王同学的博客_CSDN博客-领域博主 小王的gitee:比特王信哲 (bitewang) - Gitee.com
王同学要努力
2022/12/20
2250
力扣刷题(数组篇)
前端leetcde算法面试套路之双指针
上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法
js2030code
2022/11/02
4830
LeetCode分类刷题:双指针(Two Pointers)
双指针(Two Pointers)一直是程序员面试中的一个必须准备的主题, 面试中双指针出现的次数比较多,主要由于在工作中指针经常用到,指针问题能够直接反应面试者的基础知识、代码能力和思维逻辑,因此双指针的问题必须掌握。
ACM算法日常
2019/03/06
2K0
推荐阅读
相关推荐
【算法/学习】双指针
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档