自定义操作
介绍
在默认操作列表顶部,用户可以在YAML中定义自己的操作并在流水线中使用。操作在从Docker Hub注册中心拉取的镜像于启动的Docker容器中运行,Docker容器就像一个预装了操作系统、工具和依赖项的本地开发环境。在容器中,您可以对存储仓文件运行命令,运行对任何公开可用的第三方API的调用,并将输入数据导出到变量以在流水线中的其他操作中使用。
定义
自定义操作由三个元素定义:
所有三个元素都必须上传到存储仓的默认分支:
- 在存储仓的根目录中(单个操作)
- 在
.buddy/actions
目录中,每个操作都在其自己的子目录中(多个操作),例如:
.buddy/actions/myaction-1
.buddy/actions/myaction-2
.buddy/actions/myaction-3
一旦将操作添加到存储仓后,Buddy会自动解析操作并显示于操作列表顶部:
添加的操作可用于工作区中的所有项目,然而,我们建议将您的操作存储在具体的存储仓中。通过这种方式,将它们与您的源代码隔离开来,您可以轻松跟踪其开发记录、发布更新和修复问题。如果需要,您还可以跨多个工作区共享此存储仓中的操作。
图标
图标显示于操作磁贴和配置屏幕上
- 名称:必须是
action
- 扩展名:jpg、jpeg、png、svg
- 尺寸:最小40x40像素,可扩展大小尺寸
提示
当没有提供图标时,Buddy将使用系统默认图标。
描述
一个操作可以有一个README.md
文件形式的描述。我们建议将此类文件上传到您的操作目录,并附上操作的说明以及所需的参数、命令和变量。您还可以添加包含更新列表的变更日志,以跟踪您的操作演变记录。
YAML配置
自定义操作以类似于默认Buddy操作的方式定义为代码,您可以定义以下事项:
1. 名称
2. 输入
3. 执行命令(选填)
4. 文件系统与缓存(选填)
5. Docker镜像(例如:运行环境)
6. 输出(选填)
示例
在此,我们可以看到有三个输入项的一个操作:用户、IP与密码。输入作为变量传递命令,命令在Ubuntu最新版本环境中运行。
name: "My_Action"
inputs:
user:
type: TEXT
required: true
ip:
type: TEXT
password:
type: PASSWORD
required: true
execute_commands:
- echo $user@$ip -p $password
docker_image_name: "ubuntu"
docker_image_tag: "latest"
名称与分类
操作名称在整个工作区中必须独特,即不能与默认操作列表中的任何操作名称相同。如果名称不独特,则会出现解析错误。默认情况下,下划线被解析为空格键。例如,名为“My_Custom_Action”的操作将显示为“My Custom Action”。
默认情况下,自定义操作会添加到操作列表的自定义/热门部分。您可以通过将分类category
参数添加到YAML文件来定义自己的分类:
name: "My_Custom_Action"
category: "Example Inputs"
输入
输入可让您指定操作所需的数据。您可以添加单行或多行文本输入、复选框、命令字段、选择器等等。
在此示例中,我们可以看到两个输入:一个是用于用户名的简单文本输入,第二个是用于密码的掩码输入。这两个字段为必填。
inputs:
user:
type: TEXT
required: true
ip:
password:
type: PASSWORD
required: true
命令
默认情况下,该操作会运行Docker镜像中内置的命令。您可以通过添加execute_commands
参数来覆盖这些命令:
execute_commands:
- echo $user@$ip -p $password
提示
默认情况下,该操作会运行Docker镜像中内置的命令。如果定义了execute_commands
,则不会运行镜像命令。
文件系统与缓存
如果您的操作需要存储仓里的文件,则需要附加流水线文件系统,例如定义volume_mappings
参数。文件系统是每个流水线的专用目录。当运行流水线时,Buddy会将存储仓拉取到文件系统,允许您在其中运行命令。处理后的文件和工件保留在文件系统中,供流水线中的其他操作使用。
volume_mappings:
- /:/buddy
您还可以使用cached_dirs
参数缓存附加的目录。如果您的操作在每次运行时都下载文件,则此功能很有用——缓存文件将加快执行时间。
volume_mappings:
- /:/buddy
working_directory: "/buddy/example-folder"
cached_dirs:
- "/cache-local"
- "/cache-application"
提示
默认情况下
- 没有挂载文件系统
- 没有附加目录(
cached_dirs
)被缓存- 工作目录仍然保持在Docker镜像中定义的状态
Docker镜像
自定义操作在由用户定义镜像启动的隔离容器中运行。Docker镜像必须存储在Docker Hub上,并且可供公开访问。如果您的操作不需要特定的语言和/或框架,我们建议您使用最新版本的官方Ubuntu镜像。
docker_image_name: "ubuntu"
docker_image_tag: "latest"
提示
镜像不能定义入口点,否则它将无法工作。您可以通过将reset_entrypoint: true
添加到配置中来清除入口点。
输出
当运行操作时,将输入值作为不可设置的环境变量传递给容器。这些变量可以使用output
参数在操作中生成:
inputs:
first_input:
output:
variables:
first_input:
example: "The description of the variable."