自定义?Github?Action?库实战详解

 更新时间:2022年09月26日 08:47:45   作者:小鑫同学  
这篇文章主要为大家介绍了自定义?Github?Action?库实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

auto-push-oss Action

虽然在 Github 市场有推送 OSS 相关的 Action,但是我还是选择改造我运行了好多年的脚本来自定义符合自己要求的 Action 库。

编写步骤:

  • 添加依赖、编译脚本、action.yml配置
  • 编写自述文档
  • 编写indnex.js脚本

添加依赖、编译脚本、action.yml配置:

添加必要依赖:

"@actions/core": "^1.9.1"		// 读取 yml 参数
"@vercel/ncc": "^0.34.0"    // 打包脚本
"ali-oss": "^6.17.1"        // ali-oss依赖

添加编译脚本:

"build": "ncc build index.js --license licenses.txt"

编写 action.yml 配置文件:

name: "auto-push-oss"
description: "自动推动目录到 OSS"
# 定义输入参数
inputs:
  root:
    description: "待推送路径"
    required: true
  bucket:
    description: "oss bucket"
    required: true
  region:
    description: "oss region"
    required: true
  accessKeyId:
    description: "oss accessKeyId"
    required: true
  accessKeySecret:
    description: "oss accessKeySecret"
    required: true
runs:
  # 脚本运行环境(按官方文档给的12版本来使用)
  using: "node12"
  # 脚本执行入口(这里我们要用@vercel/ncc编译)
  main: "dist/index.js"

编写自述文档:

自述文档需要说明这个 Action 的主要作用、需要配置的参数和最小使用的例子~

auto-push-oss

方便将常见的 Vue 项目,VuePress 项目构建到根目录的 dist 文件夹推送到指定从 oss 桶的根目录,特别适合在 oss 托管 VuePress 博客~

Inputs

参数描述
root待推送文件夹
bucketoss bucket
regionoss region
accessKeyIdoss accessKeyId
accessKeySecretoss accessKeySecret

Example usage

uses: OSpoon/auto-push-oss@main
with:
  root: public
  bucket: it200
  region: oss-cn-beijing
  accessKeyId: ${{secrets.accessKeyId}}
  accessKeySecret: ${{secrets.accessKeySecret}}

编写indnex.js脚本:

提供path、fs、ali-oss 和获取 yml 参数的@actions/core依赖~

const path = require("path");
const fs = require("fs");
const core = require("@actions/core");
const OSS = require("ali-oss");

通过@actions/core提供的getInput来获取 yml 配置的参数变量~

const root = core.getInput("root");
const bucket = core.getInput("bucket");
const region = core.getInput("region");
const accessKeyId = core.getInput("accessKeyId");
const accessKeySecret = core.getInput("accessKeySecret");

OSS 推送文件主脚本

// TODO 必要依赖
// TODO 接收输入参数
const client = new OSS({
  bucket,
  region,
  accessKeyId,
  accessKeySecret,
});
const rootPath = root || "dist";
const isHave = fs.existsSync(rootPath);
if (!isHave) {
  throw new Error("路劲不存在");
}
let filepaths = [];
let putCount = 0;
function readFileSync(filepath) {
  let files = fs.readdirSync(filepath);
  files.forEach((filename) => {
    let p = path.join(filepath, filename);
    let stats = fs.statSync(p);
    if (stats.isFile()) {
      filepaths.push(p);
    } else if (stats.isDirectory()) {
      readFileSync(p);
    }
  });
}
function put(filepath) {
  const p = filepath.replace(rootPath, "").substr(1);
  return client.put(p.replace("\", "/"), filepath);
}
async function update() {
  try {
    // 递归获取所有待上传文件路径
    readFileSync(rootPath);
    let retAll = await filepaths.map((filepath) => {
      putCount++;
      console.log(`任务添加: ${path.basename(filepath)}`);
      return put(filepath);
    });
    Promise.all(retAll).then((res) => {
      const resAll = res.map((r) => {
        return r.res.statusCode === 200;
      });
      if (Object.keys(resAll).length === putCount) {
        console.log("发布成功");
      }
    });
  } catch (e) {
    console.log(e);
  }
}
// 上传发布
update();

use auto-push-oss

下面这份配置就是将网站打包并推送 OSS 的工作流程,当监测到新代码 PUSH 到 Github 后就开始执行auto-push-2-oss工作流,分别是:

    • 第一步使用actions/checkout@v2拉取代码;
    • 第二步执行npm install && npm run build安装依赖并输出网站资源;
    • 第三步使用OSpoon/auto-push-oss@main推送网站资源到 OSS;

auto-push-oss@main需要配置我们在自述文档中提到的几个必要参数需要通过 with 配置,其中accessKeyId和accessKeySecret由于涉及到 OSS 的相关秘钥,不建议也不应该明文展示到 Github,所以需要使用到项目级别的环境变量。

name: push-2-oss
on: [push]
jobs:
  auto-push-2-oss:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2
      - name: install & build 
        run: npm install && npm run build
      - name: push public oss
        uses: OSpoon/auto-push-oss@main
        with:
          root: public
          bucket: it200
          region: oss-cn-beijing
          accessKeyId: ${{secrets.accessKeyId}}
          accessKeySecret: ${{secrets.accessKeySecret}}

总结

编写完 Action 后成功也接入了 workflows ,往后就不再重复的执行构建命令和发布脚本了,只需要将修改的代码 PUSH 到 Github 后面的工作将自动完成~

本文项目已推送至GitHub,欢迎克隆演示:git clone git@github.com:OSpoon/auto-push-oss.git

以上就是自定义 Github Action 库实战详解的详细内容,更多关于Github Action 库自定义的资料请关注程序员之家其它相关文章!

相关文章

  • Mac M1安装Homebrew的方法步骤

    Mac M1安装Homebrew的方法步骤

    这篇文章主要介绍了Mac M1安装Homebrew的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • git?stash?暂存命令操作

    git?stash?暂存命令操作

    这篇文章主要介绍了git stash暂存命令操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • sublime text 添加到鼠标右键功能

    sublime text 添加到鼠标右键功能

    这篇文章主要介绍了sublime text 添加到鼠标右键功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • VsCode的jsconfig配置文件说明详解

    VsCode的jsconfig配置文件说明详解

    这篇文章主要介绍了VsCode的jsconfig配置文件说明详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 程序员学英语的一个方法

    程序员学英语的一个方法

    这篇文章主要介绍了程序员学英语的一个方法,程序员学习英语是很有必要的,只要坚持下去,相信必有收获,需要的朋友可以参考下
    2014-08-08
  • URL 长度有限制吗?

    URL 长度有限制吗?

    众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢?
    2009-06-06
  • 深入理解浏览器的各种刷新规则

    深入理解浏览器的各种刷新规则

    这篇文章给大家详细介绍了PC浏览器的刷新方式,以及简单的介绍了WISE浏览器的刷新方式,文章介绍的很详细,有需要的朋友们可以一起来看看吧。
    2016-10-10
  • vs?code开发中语法正确但显示报错问题分析解决

    vs?code开发中语法正确但显示报错问题分析解决

    这篇文章主要为大家介绍了vs?code开发中语法正确但显示报错问题分析解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • wkhtmltopdf 最好用Html转pdf的工具

    wkhtmltopdf 最好用Html转pdf的工具

    这篇文章主要介绍了wkhtmltopdf 最好用Html转pdf的工具,需要的朋友可以参考下
    2017-09-09
  • 调试JavaScript/VBScript脚本程序(IE篇)

    调试JavaScript/VBScript脚本程序(IE篇)

    JavaScript/VB Script脚本程序一般有两种执行方式,一种是嵌入在宿主程序里面执行,比如在IE浏览器里面执行;另外一种,在资源管理器里面双击执行(虽然还是通过另外一个程序解释执行,但是给人的感觉毕竟是直接运行)。
    2009-09-09

最新评论

?


http://www.vxiaotou.com