• 密钥
  • 添加密钥
  • 别名
  • 拉取请求
  • 镜像过滤器

密钥

悟空提供了将命名参数存储在YAML配置文件外部的能力,存储在一个中央的密钥存储中.这些密钥可以在运行时传递给流水线的各个步骤.

密钥暴露给流水线步骤和插件为大写环境变量,因此可以在流水线的命令部分引用.

pipeline:
  docker:
    image: docker
    commands:
+     - echo $DOCKER_USERNAME
+     - echo $DOCKER_PASSWORD
+   secrets: [ docker_username, docker_password ]

或者,您可以使用from_secret语法从密钥获取设置.在此示例中,名为secret_token的密钥将作为PLUGIN_TOKEN传递给流水线.

注意:from_secret语法仅适用于较新的settings块.

pipeline:
  docker:
    image: my-plugin
    settings:
+     token:
+       from_secret: secret_token

请注意,参数表达式需要预处理.当在参数表达式中使用密钥时,应进行转义.

pipeline:
  docker:
    image: docker
    commands:
-     - echo ${DOCKER_USERNAME}
-     - echo ${DOCKER_PASSWORD}
+     - echo $${DOCKER_USERNAME}
+     - echo $${DOCKER_PASSWORD}
    secrets: [ docker_username, docker_password ]

添加密钥

密钥可以通过UI或CLI添加到悟空的密钥存储中.

别名

有些场景需要您使用别名存储密钥.您可以使用以下语法将别名映射到预期名称:

pipeline:
  docker:
    image: plugins/docker
    repo: octocat/hello-world
    tags: latest
+   secrets:
+     - source: docker_prod_password
+       target: docker_password

拉取请求

默认情况下,密钥不会暴露给拉取请求.您可以通过创建密钥并启用pull_request事件类型来覆盖此行为.

woodpecker-cli secret add \
  -repository octocat/hello-world \
  -image plugins/docker \
+ -event pull_request \
+ -event push \
+ -event tag \
  -name docker_username \
  -value <value>

请小心将密钥暴露给拉取请求.如果您的存储库是开源的并接受拉取请求,则您的密钥不安全.不良行为者可以提交恶意拉取请求,从而暴露您的密钥.

镜像过滤器

为了防止恶意拉取请求滥用您的密钥,您可以将密钥限制为镜像列表.它们不适用于任何其他容器.此外,您还可以使密钥仅适用于插件(没有用户定义命令的步骤).

如果启用“仅适用于插件”选项,请始终设置镜像过滤器.否则,密钥可以通过一个非常简单的自开发插件访问,因此不安全.如果您只设置了镜像过滤器,仍可以使用相同的镜像并通过指定打印命令来访问密钥.:::

示例

使用默认设置创建密钥.该密钥将可用于流水线中的所有镜像,并且将可用于所有推送、标记和部署事件(而不是拉取请求事件).

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

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

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

Create the secret and limit to a single image and plugin events:

woodpecker-cli secret add \
  -repository octocat/hello-world \
+ -image plugins/s3 \
+ -image peloton/woodpecker-ecs \
  -name aws_access_key_id \
  -value <value>

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

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

使用curl @语法从文件加载密钥.这是从文件加载密钥以保留新行的推荐方法:

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