在 Tekton Task 中使用 NPM 连接器
在 Tekton Task 中使用 NPM 连接器,可以在任务执行期间集中管理 npm registry 访问,并实现无需密钥的包操作。
本文介绍如何在一个 TaskRun 中使用多连接器能力来:
- 从镜像仓库拉取依赖
- 将包发布到目标仓库
目录
Tekton Task 的要求多连接器场景准备连接器使用nodejs:0.1 的 TaskRun 示例CA Bundle 示例在 Pipeline 集成中使用 ResourceInterface延伸阅读Tekton Task 的要求
并非所有 Tekton Task 都可以使用 NPM 连接器。
NPM 连接器通过 Connectors CSI Driver 注入临时 registry 配置。它提供 npmrc 和 yarnrc 配置,用于生成 .npmrc、.yarnrc.yml 和 ca.crt。
因此,Tekton Task 必须满足以下要求:
- 支持通过 Workspace 挂载
.npmrc文件 - 支持通过 Workspace 挂载 CA 证书(在 forward-proxy MITM 模式下访问 HTTPS repository 时必需)
catalog 中的 nodejs task(0.1)已经支持这些工作区:
npm-config:包管理器配置工作区ca-bundle:自定义 CA 工作区
多连接器场景
要在同一个 TaskRun 中从一个 registry 安装依赖并向另一个 registry 发布包,请准备两个 NPM 连接器:
npm-mirror-connector:设置spec.params.registryType=mirrornpm-publish-connector:设置spec.params.registryType=publish
当这两个连接器都通过 volumeAttributes.connectors 挂载时,NPM 配置会按以下方式渲染:
- 依赖下载优先使用
registryType=mirror的连接器 - 对于
nodejs:0.1,发布端点由publishRepository控制;请将registryType=publish连接器地址作为publishRepository的值使用
在一个 CSI volume 中使用多个连接器之前,请先在 connectors-config 中启用 enable-multi-connector。
准备连接器
示例连接器对:
使用 nodejs:0.1 的 TaskRun 示例
当两个连接器都就绪后,可直接引用内置的 nodejs task。
在此示例中:
npm ci使用镜像连接器渲染后的 registry 设置解析依赖publishRepository会在nodejstask 中触发npm publish --registry ...caFileName: ca.crt告诉nodejs:0.1从ca-bundle工作区加载由 NPM 连接器生成的证书
CA Bundle 示例
在 forward-proxy MITM 模式下,所有 HTTPS npm repository 流量都会经过 connectors-proxy,并且必须信任代理 CA。
因此,当你的依赖仓库或发布仓库使用 https:// 时,请始终挂载 ca-bundle 并将 caFileName 设置为 ca.crt。
在此配置下,ca.crt 由 NPM 连接器渲染,并通过 ca-bundle 工作区被 nodejs:0.1 使用,因此依赖下载和包发布都可以成功访问 HTTPS repository。
在 Pipeline 集成中使用 ResourceInterface
如果你通过 Pipeline UI 集成连接器,而不是手动编写 CSI 字段,请使用 NPMRepository ResourceInterface。
典型使用流程:
- 在 Pipeline Integration 中,选择接口类别
NPMRepository。 - 选择一个
spec.params.registryType=publish的主连接器,然后将其他连接器(例如registryType=mirror连接器)添加到同一个集成项中。这样可以保持连接器选择与任务中后续的publishRepository参数选择一致。 - 将集成工作区绑定到任务的
npm-config和ca-bundle工作区。
在运行时,ResourceInterface 会为你渲染连接器工作区绑定:
npm-config挂载从所选连接器合并后的配置(多连接器)ca-bundle挂载用于 TLS 信任的证书配置
这意味着用户可以继续直接使用 nodejs:0.1,同时将连接器选择和工作区渲染委托给 Pipeline 集成。
详情请参见 ResourceInterface 和 Pipeline 集成。