- 密钥
- 添加密钥
- 别名
- 拉取请求
- 镜像过滤器
密钥
悟空提供了将命名参数存储在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