第26章 Stash嵌入式插件:基于JavaScript的脚本执行与API指南
嵌入式插件任务¶ 嵌入式插件任务通过脚本系统在 stash 进程内执行。
支持的脚本语言¶ Stash 目前通过 goja 支持 Javascript 嵌入式插件任务。
Javascript 插件¶
插件输入¶ 输入通过全局变量 input 提供给 Javascript 插件任务,它是一个对象,其结构基于 Plugins 页面 Plugin input 部分所述的结构。
⚠️ 注意:在大多数嵌入式插件中,通常不需要 server_connection 字段。
插件输出¶ Javascript 插件任务的输出取自脚本的求值结果。输出应符合 Plugins 页面 Plugin output 部分所述的结构。
有多种方式可以返回插件输出:
示例 #1¶ (function() { return { Output: "ok" }; })();
示例 #2¶ function main() { return { Output: "ok" }; }
main();
示例 #3¶ var output = { Output: "ok" };
output;
日志¶ 使用 Javascript 插件记录日志的方法见下文 Javascript API 部分。
插件配置文件格式¶
exec¶ 对于嵌入式插件,exec 字段是一个列表,第一个元素为要执行的 Javascript 文件路径。该路径应相对于插件配置文件所在目录。
interface¶ 对于嵌入式插件,interface 字段必须设置为以下值之一: * js
Javascript API¶
日志¶ Stash 为 Javascript 插件提供以下日志 API:
Method Description
log.Trace(
log.Debug(
log.Info(
log.Warn(
log.Error(
log.Progress(<0 到 1 之间的浮点数>) 设置插件任务的进度,取值为浮点数,0 表示 0%,1 表示 100%。
GQL¶ Stash 提供以下 API,用于通过 graphql 接口与 stash 通信:
Method Description
gql.Do(
示例¶ // 创建一个 tag var mutation = "\ mutation tagCreate($input: TagCreateInput!) {\ tagCreate(input: $input) {\ id\ }\ }";
var variables = { input: { 'name': tagName } };
result = gql.Do(mutation, variables); log.Info("tag id = " + result.tagCreate.id);
工具函数¶ Stash 提供以下工具函数 API:
Method Description
util.Sleep(<毫秒数>) 将当前线程挂起指定时长。