news 2026/9/16 13:28:32

AWS CLI 实战:使用 create-custom-action-type 创建 CodePipeline 自定义 Action

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AWS CLI 实战:使用 create-custom-action-type 创建 CodePipeline 自定义 Action

AWS CLI 实战:使用 create-custom-action-type 创建 CodePipeline 自定义 Action

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

导读

本文讲解如何使用 AWS CLI 的aws codepipeline create-custom-action-type命令,将自建的外部系统(例如 Jenkins 服务器)封装为 CodePipeline 流水线中可复用的自定义 Action。你将掌握自定义 Action JSON 定义文件的完整结构、每个字段的含义与约束、通过--cli-input-json提交定义的方法,以及配套的查询与删除命令,让自定义 Action 真正接入流水线并与外部构建系统联动。文中所有命令与参数均以当前仓库 awscli/examples/codepipeline/create-custom-action-type.rst 及 codepipeline 服务模型 为事实依据。

命令概览:一条命令注册自定义 Action

CodePipeline 允许用户在流水线中使用三类 Action:AWS 官方提供的(Owner 为AWS)、第三方合作伙伴提供的(ThirdParty),以及用户自己注册的(Custom)。当你的构建、测试或部署系统不在 CodePipeline 原生集成列表中时,可以将其注册为自定义 Action。

核心命令只有一条,通过--cli-input-json指向一个预先生成的 JSON 文件:

aws codepipeline create-custom-action-type --cli-input-json file://MyCustomAction.json

该命令没有其他必填的参数选项——定义文件即一切。命令成功后,AWS 会返回所创建 Action 的完整结构(包括idsettingsactionConfigurationPropertiesinputArtifactDetailsoutputArtifactDetails),作为 JSON 输出到终端。

从服务模型可以看到,该操作对应的 HTTP 请求为POST /,输入形状为CreateCustomActionTypeInput,输出形状为CreateCustomActionTypeOutput(见 service-2.json 中 CreateCustomActionType 的定义)。

JSON 定义文件逐字段详解

MyCustomAction.json是自定义 Action 的"身份证",以下示例来自官方文档,涵盖了一个 Build 类自定义 Action 的全部要素:

{ "category": "Build", "provider": "MyJenkinsProviderName", "version": "1", "settings": { "entityUrlTemplate": "https://192.0.2.4/job/{Config:ProjectName}/", "executionUrlTemplate": "https://192.0.2.4/job/{Config:ProjectName}/lastSuccessfulBuild/{ExternalExecutionId}/" }, "configurationProperties": [ { "name": "MyJenkinsExampleBuildProject", "required": true, "key": true, "secret": false, "queryable": false, "description": "The name of the build project must be provided when this action is added to the pipeline.", "type": "String" } ], "inputArtifactDetails": { "maximumCount": 1, "minimumCount": 0 }, "outputArtifactDetails": { "maximumCount": 1, "minimumCount": 0 } }

顶层必需字段:category、provider、version

根据服务模型中的CreateCustomActionTypeInput,以下字段为必填

字段说明约束(来自 service-2.json)
categoryAction 类别,决定该 Action 在流水线中的语义角色枚举值:SourceBuildDeployTestInvokeApprovalCompute
provider提供方名称,即外部服务的标识长度 1–35 字符,仅允许[0-9A-Za-z_-]+
versionAction 版本标识,用于区分同一 provider 的多个版本长度 1–9 字符,仅允许[0-9A-Za-z_-]+
inputArtifactDetails输入工件数量上下限minimumCount/maximumCount均为 0–10 的整数
outputArtifactDetails输出工件数量上下限同上

categoryproviderversion三者的组合唯一确定一个 Action 类型,注册后不可重复。选择category时需遵循 CodePipeline 的语义约束:例如 Source 类 Action 通常不应接收输入工件(输入/输出数量均应设 0),而 Build 类 Action 则至少消费一个输入工件、产出一个输出工件。

settings:外部系统 URL 模板

settings用于告诉 CodePipeline 控制台如何跳转到你的外部系统,其四个可选字段定义在ActionTypeSettings形状中:

字段用途
entityUrlTemplate控制台流水线视图中展示的深链接,指向外部系统的资源配置页(如 Jenkins 的 Job 页面)
executionUrlTemplate指向外部系统执行实体的落地页链接,在流水线视图页展示(如某次构建的运行详情页)
thirdPartyConfigurationUrl外部服务的注册/首次配置页面 URL
revisionUrlTemplate允许用户更新或变更外部 Action 配置的页面链接

URL 模板中可以嵌入占位符{Config:name}(引用配置属性,该属性必须同时为required: truesecret: false)以及{ExternalExecutionId}(引用外部系统返回的执行 ID)。全部 URL 模板字段长度均为 1–2048 字符。

configurationProperties:配置属性定义

configurationProperties是自定义 Action 的核心——它决定了用户在流水线中添加该 Action 时需要填写哪些配置。ActionConfigurationProperty形状中每个属性的字段如下:

字段必填说明与约束
name属性名,1–50 字符
required是否为必填值
key是否为键属性(用于唯一标识该 Action 实例)
secret是否为机密值。机密值会对除GetJobDetailsGetThirdPartyJobDetailsPollForJobsPollForThirdPartyJobs之外的调用隐藏;更新流水线时传入*****可保留原值
queryable是否用于PollForJobs轮询匹配。一个自定义 Action 最多只能有一个 queryable 属性,且该属性必须required: truesecret: false;当流水线使用该属性时,值必须 ≤20 字符,且仅限字母、数字、下划线和连字符
description展示给用户的描述,1–160 字符
type属性类型,枚举值:StringNumberBoolean

上述示例定义了一个名为MyJenkinsExampleBuildProject的字符串属性,它是必填且作为 key,用户在添加 Action 时必须提供构建项目名。结合settings中的{Config:ProjectName}占位符,CodePipeline 会把用户填写的项目名动态拼入 Jenkins Job 的 URL 中——这正是文档示例中entityUrlTemplateconfigurationProperties联动工作的方式。

input/outputArtifactDetails:工件契约

inputArtifactDetailsoutputArtifactDetails声明该 Action 消费与产出工件(artifact)的数量范围:

  • minimumCount:最少工件数(0–10);
  • maximumCount:最多工件数(0–10)。

示例中 Build Action 输入与输出均为 0–1,表示它可选消费一个输入工件并至多产出一个输出工件,供流水线后续阶段使用。

与流水线定义联动:如何被 ActionTypeId 引用

注册后的自定义 Action 通过流水线定义中的ActionTypeId被引用。ActionTypeId形状包含四个必填字段:categoryownerproviderversion,其中owner的合法值为AWSThirdPartyCustom。自定义 Action 在流水线 stage 中的 action 配置如下:

{ "name": "MyJenkinsBuild", "actionTypeId": { "category": "Build", "owner": "Custom", "provider": "MyJenkinsProviderName", "version": "1" }, "configuration": { "ProjectName": "MyJenkinsExampleBuildProject" }, "inputArtifacts": [ { "name": "SourceArtifact" } ], "outputArtifacts": [ { "name": "BuildArtifact" } ] }

注意这里的owner必须为Customproviderversion必须与你注册时使用的值完全一致,configuration中的键即对应注册时configurationProperties中声明的属性名。

验证与生命周期管理:查询、列出与删除

查看所有可用 Action 类型

使用list-action-types并配合--action-owner-filter Custom过滤,可查看当前账号下已注册的自定义 Action:

aws codepipeline list-action-types --action-owner-filter Custom

官方示例 的输出展示了两个已注册的 Build/Test 类自定义 Action,其idowner均为Customsettings中 URL 模板引用了{Config:ProjectName}{ExternalExecutionId}。该命令也用于在删除前核对categoryversionprovider的准确取值。

删除自定义 Action

使用delete-custom-action-type删除不再使用的 Action,同样通过 JSON 文件指定三元组(category / version / provider):

aws codepipeline delete-custom-action-type --cli-input-json file://DeleteMyCustomAction.json
{ "category": "Build", "version": "1", "provider": "MyJenkinsProviderName" }

删除成功时命令输出None(见 delete-custom-action-type 示例)。删除操作要求该 Action 不再被任何流水线引用,且categoryversionprovider必须与注册时完全一致。

错误处理与注意事项

服务模型为CreateCustomActionType声明了以下错误形状(service-2.json):

  • ValidationException:定义文件字段缺失、枚举值非法或违反上述长度/正则约束;
  • LimitExceededException:自定义 Action 数量已达账号上限;
  • TooManyTagsException/InvalidTagsException:传入的标签过多或标签格式不合法;
  • ConcurrentModificationException:与其他请求并发修改冲突。

实际使用中的常见失败点包括:providerversion含非法字符(如空格、点号);configurationProperties中 queryable 属性不满足"必填且非机密"的组合约束;inputArtifactDetails的 min 大于 max 等。定义 JSON 时建议先用 JSON 校验工具检查格式,再执行命令。

小结

aws codepipeline create-custom-action-type是 CodePipeline 自定义扩展能力的入口:通过一份结构化的 JSON 文件,你可以把任意外部系统封装为标准的 Build/Test/Deploy 等类别 Action,并通过settingsURL 模板与控制台深度联动、通过configurationProperties定义用户配置项、通过工件数量声明接入流水线数据流。配合list-action-types --action-owner-filter Customdelete-custom-action-type,即可完成自定义 Action 的完整生命周期管理。定义文件结构与全部字段约束均可对照仓库中的 create-custom-action-type.rst 示例 和 codepipeline 服务模型 进行核验。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 13:27:54

计算机专业核心课程自学路线与实践指南

1. 计算机专业核心课程自学路线全解析作为一名计算机专业大二学生,假期是系统梳理专业知识的黄金时期。最近我花了三周时间集中攻克了操作系统原理、计算机网络等七门核心课程,结合B站优质资源和经典教材,总结出一套高效的自学方法。这些课程…

作者头像 李华
网站建设 2026/9/16 13:23:57

解析直链实测:五步跑通九大网盘的直链获取

解析直链实测:五步跑通九大网盘的直链获取 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷…

作者头像 李华
网站建设 2026/9/16 13:23:39

MATLAB数组维度变换:reshape函数工程实战指南

1. MATLAB数组维度变换:从reshape(A,3,4)到工程实战在数据处理和科学计算领域,数组维度的灵活调整是每个工程师和科研人员的必备技能。记得我第一次处理卫星遥感数据时,面对一个庞大的三维数据集却需要将其转换为特定格式进行傅里叶变换&…

作者头像 李华
网站建设 2026/9/16 13:23:39

智能体技术架构与商业应用全景分析

1. 研究背景与核心价值去年夏天,我在整理行业技术趋势时发现一个有趣现象:各大科技公司的技术路线正在从单一AI模型向复合型智能体架构转变。这份全球智能体竞争研究报告正是基于这样的行业背景产生,它系统性地梳理了当前智能体技术的发展现状…

作者头像 李华
网站建设 2026/9/16 13:23:35

WinForm自绘图表实现鼠标最近点定位与智能游标

简介:本资源是一份面向C# WinForm开发者的技术实践项目,聚焦于自定义图表交互功能的实现,解决非Chart控件下鼠标悬停定位、最近数据点计算与动态游标绘制等核心问题,适用于需提升数据可视化交互体验的中高级桌面应用开发场景。压缩…

作者头像 李华