跳到主要内容

密钥

Woodpecker 提供在中央密钥存储中存储命名变量的功能。 这些密钥可以使用关键字 from_secret 安全地传递给各个管道步骤。

有三个不同级别的密钥可用。如果在多个级别定义了密钥,则以下优先级顺序适用(最后一个获胜):

  1. 仓库密钥:适用于仓库的所有管道。
  2. 组织密钥:适用于组织的所有管道。
  3. 全局密钥:只能由实例管理员设置。 全局密钥适用于 整个 Woodpecker 实例的所有管道,因此应该谨慎使用。

除了密钥的本机集成之外,还可以通过在管道步骤中直接与外部密钥提供商交互来使用它们。可以通过 Woodpecker 密钥配置对这些提供商的访问,这允许从相应的外部来源检索密钥。

注意

Woodpecker 可以掩码来自其自己密钥存储的密钥,但无法对外部密钥应用相同的保护。因此,这些外部密钥可能会在管道日志中暴露。

使用

您可以使用 from_secret 语法从 Woodpecker 密钥设置设置或环境值。

以下示例传递一个名为 secret_token 的密钥,该密钥存储在名为 TOKEN_ENV 的环境变量中:

 steps:
- name: 'step name'
image: registry/repo/image:tag
commands:
+ - echo "The secret is $TOKEN_ENV"
+ environment:
+ TOKEN_ENV:
+ from_secret: secret_token

相同的语法可用于将密钥传递给(插件)设置。 名为 secret_token 的密钥被分配给设置 TOKEN,然后在插件中作为环境变量 PLUGIN_TOKEN 可用(有关详细信息,请参阅插件)。 PLUGIN_TOKEN 然后由插件本身内部使用,并在执行期间考虑。

 steps:
- name: 'step name'
image: registry/repo/image:tag
+ settings:
+ TOKEN:
+ from_secret: secret_token

转义密钥

请注意,参数表达式是预处理的,即它们在管道启动之前被评估。 如果要在表达式中使用密钥,必须正确转义(使用 $$)以确保正确处理。

 steps:
- name: docker
image: docker
commands:
- - echo ${TOKEN_ENV}
+ - echo $${TOKEN_ENV}
environment:
TOKEN_ENV:
from_secret: secret_token

事件过滤器

默认情况下,密钥不会暴露给拉取请求。 但是,您可以通过创建密钥并启用 pull_request 事件类型来更改此行为。 这可以通过 UI 或 CLI 配置。

注意

在为拉取请求暴露密钥时要小心。 如果您的仓库是公开的并接受来自所有人的拉取请求,您的密钥可能面临风险。 恶意行为者可能利用这一点来暴露您的密钥或将其转移到外部位置。

插件过滤器

为了防止您的密钥被恶意用户滥用,您可以将密钥限制为插件列表。 如果启用,它们将不可用于任何其他插件。 插件的优势是它们不能执行任意命令,因此不能泄露密钥。

提示

如果您指定标签,过滤器会将其考虑在内。 但是,如果同一镜像在列表中出现多次,最低特权的条目将优先。 例如,没有标签的镜像将允许所有标签,即使它包含另一个带有标签的条目。

插件过滤器

CLI

除了 UI 之外,还可以使用 CLI 管理密钥。

使用默认设置创建密钥。 该密钥可用于管道中的所有镜像以及所有 pushtagdeployment 事件(不适用于 pull_request 事件)。

woodpecker-cli repo secret add \
--repository octocat/hello-world \
--name aws_access_key_id \
--value <value>

创建密钥并将其限制为单个镜像:

 woodpecker-cli secret add \
--repository octocat/hello-world \
+ --image woodpeckerci/plugin-s3 \
--name aws_access_key_id \
--value <value>

创建密钥并将其限制为一组镜像:

 woodpecker-cli repo secret add \
--repository octocat/hello-world \
+ --image woodpeckerci/plugin-s3 \
+ --image woodpeckerci/plugin-docker-buildx \
--name aws_access_key_id \
--value <value>

创建密钥并为多个钩子事件启用它:

 woodpecker-cli repo secret add \
--repository octocat/hello-world \
--image woodpeckerci/plugin-s3 \
+ --event pull_request \
+ --event push \
+ --event tag \
--name aws_access_key_id \
--value <value>

密钥可以使用 @ 语法从文件加载。 这种方法推荐用于从文件加载密钥,因为它确保换行符被保留(这对 SSH 密钥很重要,例如):

 woodpecker-cli repo secret add \
-repository octocat/hello-world \
-name ssh_key \
+ -value @/root/ssh/id_rsa