以下部分描述了 Zuul 配置的主要部分。以下所有内容都可以在 Zuul 管理的存储库内的文件中找到。
当系统管理员配置 Zuul 对项目进行操作时,他们会为该项目指定两个安全上下文之一。配置项目是一个 主要负责为 Zuul 保存配置信息和工作内容的项目。配置项目中定义的作业以提升的权限运行,并且所有 Zuul 配置项都可供使用。基础作业(即没有父作业的作业)只能在配置项目中定义。预计对 config-projects 的更改在合并之前将经过仔细审查。
不受信任的项目是一个项目,其主要重点不是操作 Zuul,而是正在测试或部署的项目之一。这些项目可用的 Zuul 配置语言有些受限,并且这些项目中定义的作业在受限的执行环境中运行,因为它们可能正在对尚未经过审查的更改进行操作。
当 Zuul 启动时,它会检查系统管理员在租户配置中指定的所有 git 存储库,并在每个存储库的根目录中搜索文件。Zuul 首先寻找一个名为 的文件zuul.yaml或一个名为 的目录zuul.d,如果没有找到,.zuul.yaml或者.zuul.d(带前导点)。在untrusted-project的情况下,每个分支的配置都包括在内,但是,在 config-project的情况下,只检查一个分支。config项目分支可以配置租户配置 tenant.config-projects..load-branch属性。
当对不受信任项目中的这些文件之一提出更改时,更改中建议的配置将合并到运行配置中,以便对 Zuul 配置的任何更改都作为该更改的一部分进行自我测试。如果存在配置错误,则不会运行任何作业,并且任何适用的管道都会报告该错误。如果对配置项目进行更改,则会解析新配置并检查错误,但不会使用新配置来测试更改。这是因为 config-projects 中的配置能够访问提升的权限,并且在合并之前应该始终进行审查。
一旦包含 Zuul 配置更改的更改合并到任何 Zuul 管理的存储库,新配置立即生效。
许多选项接受文字字符串或正则表达式。在这些情况下,正则表达式匹配从字符串的开头开始,就像在正则表达式的开头有一个隐含的一样^。要在任意位置匹配,.*请添加到正则表达式之前。
Zuul 使用RE2 库 ,与 PCRE 相比,该库具有受限的正则表达式语法。
Zuul 支持将加密数据直接存储在其运行的项目的 git 存储库中。如果您的作业需要私人信息才能运行(例如,与第三方服务交互的凭据),则这些凭据可以与作业定义一起存储。
Zuul 中的每个项目都有自己自动生成的 RSA 密钥对,任何人都可以使用它来加密秘密,只有 Zuul 能够解密它。Zuul 使用其内置的网络服务器为每个项目的公钥提供服务。它们可以在路径中获取,
/api/tenant/<tenant>/key/<project>.pub
其中<project>是项目的规范名称,是该项目<tenant>的租户名称。
Zuul 目前支持一种加密方案,PKCS#1 with OAEP,它不能存储超过 3760 位的秘密(由 4096 位的密钥长度减去 336 位的开销得出)。此方案使用的填充确保检查加密数据的人无法确定数据明文版本的长度,除非知道它不超过 3760 位(或其倍数)。
在配置文件本身中,Zuul 使用一种可扩展的方法来指定用于秘密的加密方案,以便以后可以添加其他方案。要指定机密,请使用 !encrypted/pkcs1-oaepYAML 标记和 base64 编码值。例如:
- secret:
name: test_secret
data:
password: !encrypted/pkcs1-oaep |
BFhtdnm8uXx7kn79RFL/zJywmzLkT1GY78P3bOtp4WghUFWobkifSu7ZpaV4NeO0s71YUsi
...
为了支持超过 3760 位的秘密,加密标签后的值可以是一个列表而不是标量。例如:
- secret:
name: long_secret
data:
password: !encrypted/pkcs1-oaep
- er1UXNOD3OqtsRJaP0Wvaqiqx0ZY2zzRt6V9vqIsRaz1R5C4/AEtIad/DERZHwk3Nk+KV
...
- HdWDS9lCBaBJnhMsm/O9tpzCq+GKRELpRzUwVgU5k822uBwhZemeSrUOLQ8hQ7q/vVHln
zuul -client 实用程序提供了一种简单的方法来加密 Zuul 项目的秘密:
usage: zuul-client encrypt [-h] [--public-key /path/to/pubkey]
[--tenant TENANT] [--project PROJECT] [--no-strip]
[--secret-name SECRET_NAME]
[--field-name FIELD_NAME] [--infile INFILE]
[--outfile OUTFILE]
options:
-h, --help show this help message and exit
--public-key /path/to/pubkey
path to project public key (bypass API call)
--tenant TENANT tenant name
--project PROJECT project name
--no-strip Do not strip whitespace from beginning or end of
input. Ignored when --infile is used.
--secret-name SECRET_NAME
How the secret should be named. If not supplied, a
placeholder will be used.
--field-name FIELD_NAME
How the name of the secret variable. If not supplied,
a placeholder will be used.
--infile INFILE A filename whose contents will be encrypted. If not
supplied, the value will be read from standard input.
If entering the secret manually, press Ctrl+d when
finished to process the secret.
--outfile OUTFILE A filename to which the encrypted value will be
written. If not supplied, the value will be written to
standard output.
zuul.yaml和配置文件是 YAML 格式的.zuul.yaml,由一系列项目组成,每个项目都在下面引用。
在zuul.d(或.zuul.d)目录的情况下,Zuul 递归目录并使用排序路径顺序中的所有 .yaml 文件扩展配置。例如,要将作业的变体保存在单独的文件中,需要在主要条目之后加载它,例如在文件名中使用数字前缀:
* zuul.d/pipelines.yaml
* zuul.d/projects.yaml
* zuul.d/01_jobs.yaml
* zuul.d/02_jobs-variants.yaml
注意遍历子目录。任何包含 .zuul.ignore文件的子目录都将被删除和忽略(如果需要,这有助于将剧本或角色保存在配置目录中)。如果大家想了解更多相关知识,不妨来关注一下极悦的Java视频教程,里面的课程内容从入门到精通,细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习