zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Jenkins凭证/凭据管理详解

2023-04-18 16:17:56 时间


一、Jenkins中的凭证

凭证插件( Credentials plugin) (包含在 Jenkins 安装中)提供了对凭证的创建和管理机制,同时也为其他插件提供了用于存储和访问凭证的 API

凭证类型

在这里插入图片描述
在这里插入图片描述
最常用的是用户名和密码,通过它们去下载git仓库的源码

凭证默认保存在 JENKINSHOME/secrets 目录下

凭证范围

凭证具有与它们相关联的范围。这是 一种表示它们如何才能被暴露的方式。 Jenkins 使用的主要范围有如下 3种。

系统

顾名思义,这个范围与根上下文,也就是 Jenkins 系统相关联。此范围中的凭证只被暴露给系统和后台任务,并且一般被用于连接到构建节点/代理节点等事情。

全局

全局范围是默认选项,通常用来确保 Jenkins 中的任务可以使用凭证。

用户

顾名思义,这个范围是每个用户。这意味 只有 Jenkins 中的线程作为该用户进行身份验证时,凭证才可用。

凭证域

凭证域提供了 一种在共同域名下组合凭证集合的方怯。

当定义凭证域时,你需要提供 一个域名和 一个“规范”,比如一 个主机名或 URL 模式。

Jenkins 总是有至少 一个凭证域一一那就是全局域。全局凭证城没有任何规范,因此它适用于 Jenkins 中的任何东西去使用

凭证提供者

凭证提供者是可以存储和获取凭证的地方。 这可以是内部凭证存储,也可以是外部凭证库。

系统凭证提供者 (Jenkins 凭证提供者,常用

这会在根上下文中暴露凭证(Jenkins 本身) 。两个凭证范围可用:系统和全局。你可以在 Jenkins →凭证→系统中 看到这些。
在这里插入图片描述

用户凭证提供者

这为用户暴露了每个用户的凭证存储。只有用户范围是可用的,并且 一个用户不能看到另 一个用户的用户凭证。
你可以在 Jenkins →username →凭证→用户或者Jenkins →人们→ usern me →凭证→用户中看到这些凭证。

文件夹凭证提供者

这是由文件夹插件(Folder plugin )提供的。它暴 露了每个文件夹的凭证存储并支持文件夹及其任何子文件夹的全局范围。

你可以在 Jenkins →<folder name> →凭证→文件夹中看到这些凭证。

BlueOcean 凭证插件

这个范围的凭证用于 Blue Ocean 接口和通过它创建/访问的项目。

所有这些提供者都可以与凭证域 一起使用。

凭证存储

凭证存储允许凭证提供者向 Jenkins 暴露凭证。存储与特定的上下文关联,并且与全局域绑定或者可以使用自定义域。它们可以支持 一组凭证域。

内部存储库是实际上存储凭证的地方。外部存储库通常是凭证的扁平化引用或者使用元数据和像查询这样更高级功能的服务。

二、管理凭证

在界面上可以允许 Jenkins 用户使用的选项如下:

  • 选择那些允许 Jenkins 使用的凭证提供者来解析凭证。
  • 选择可以被解析和配置的凭证类型。
  • 为一个特定的提供者指定可以被包含或者排除的凭证类型。

选择凭证提供者

在配置凭证页面的顶端有 一个下拉列表框,可以告诉 Jenkins 可以使用哪些凭证提供者。
默认选项是使用所有可用( All available )提供者。
在这里插入图片描述
不管是选择排除已选择(Exclude selected ,排除提供者)还是只选择( Only selected, 包含提供者)选项,都会显示 一个带复选框的提供者列表。
根据选项,可以勾选对应提供者旁边的复选框,以从 一个可用的提供者集合中排除它们或者将它们包 含在可用的提供者集合中
在这里插入图片描述

选择凭证类型

默认选项是使用所有可用(All available )类型
在这里插入图片描述

通过提供者指定凭证类型

配置凭证页面的最后 部分是关于限制的部分。这部分允许你指定 Jenkins 从特定提供者中允许或排除的凭证类型。这是 一种微调 Jenkins 可以从 个提供者那里使用什么的方式。

注意,做这些事情是可选的而不是必需的。

这部分的添加下拉按钮中有两个选项(包含和排除) 。选择其中任意 一个将创建 一个允许你选择一 个提供者和类型的新页面元素 。
如果你选择了包含,这个类型的凭证将会被那个提供者包含,而排除选项则相反
在这里插入图片描述

三、创建和管理凭证

查看系统凭证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在每个凭证页面上,顶部表列出了在此上下文和任何父上下文中可用的凭证。这个表有如下6 列。

在这里插入图片描述
下一个表(中间的)列出了当前上下文中可用的凭证存储。这里有如下列。
在这里插入图片描述
在这里插入图片描述

添加一个新域或者凭证

创建一个名叫beijing_nodes的域

在这里插入图片描述
规范( Specification )字段允许我们区分这个域。允许通过模式指定筛选类型。
在创建规范后, 你选择 一个在 Jenkins 中使用的凭证并且输入 一个与模式匹配的相关值时,来自该域的凭证将作为选项进行呈现。

请注意,如果不为新域提供规范,那么该域将有效地等同于全局域

选择一种最简单的规范:主机名。然后可以添加模式来匹配节点的命名约定
在这里插入图片描述
在这里插入图片描述
域创建成功,接下来创建凭据
在这里插入图片描述

添加凭据

添加一个用户ssh登录的用户名/密码凭据
在这里插入图片描述
在这里插入图片描述

使用新域和凭证

在添加代理节点中使用
系统管理→节点管理
在这里插入图片描述
新建节点
在这里插入图片描述
在这里插入图片描述
使用ssh启动方式
在这里插入图片描述
填入主机名,由于我们在创建域时输入的模式是*-beijing.com,所以这里得匹配这个模式才能选择上面创建ssh登录凭证
在这里插入图片描述
如果主机名格式不匹配,则不能选择上面创建的ssh登录凭证
在这里插入图片描述

四、高级凭证:基于角色的访问权限

Jenkins Role-based Authorization Strategy基于角色的访问权限控制

五、在流水线中使用凭证

Groovy通过withCredentials读取Jenkins凭证

六、控制脚本安全性

安全性由脚本安全插件( Script Security plugin )提供的。

Jenkins 通过两种机制来确保脚本安全:脚本批准和 Groovy沙箱。

被丢弃的权限:
在这里插入图片描述

脚本检查

Jenkins 管理员 创建一个脚本或在配置中包含一个脚本并进行保存时,脚本会被自动批准并加入己批准的列表中 。批准列表中的脚本可以由任何人运行。

如果 一个非管理员试图运行一个脚本,而这个脚本不在批准列表中,那么 它将被禁止运行直到 /除非管理员批准。

示例:

node{
    stage('test') {
        currentBuild.rawBuild.getPreviousSuccessfulBuild()
    }
}

这个脚本被标记了,因为它试图使用内部的rawBuild 对象来获取信息

从输出结果可以看出该脚本没有被批准
在这里插入图片描述

脚本批准

如果非管理员试图运行需要批准的脚本, Jenkins 将禁止运行它。它还会添加 一个需要被批准的消息到队列中供管理员检查

管理员可以通过系统管理→In-process Script Approval来管理
在这里插入图片描述
在这里插入图片描述
有三个动作可以选择:

Approve		#批准该方法可以执行
Approve assuming permission check	#允许在一个实际用户正在执行(而不是系统调用)并且假设这个用户具有适当的 Jenkins 权限来执行该操作时执行该方法。如果批准 ,该方法将被添加到内部白名单中。
Deny		#拒绝该方法执行

Groovy沙箱

虽然脚本批准机制提供了一个良好的签名机制来验证脚本,但是批准每 个来自非管理员的新脚本都会变得费力且不可管理 。
为了简化这种负担, Jenkins 还支持在 Groovy沙箱中运行脚本的能力。这是通过勾选流水线脚本文本窗口底部的使用 Groovy 沙箱( Use Groovy Sandbox )复选框来实现的
在这里插入图片描述
这里的基本思想是, Jenkins 维护一个白名单方法集。这意味着这些方怯被认为在任何脚本中都是安全的。
如果勾选使用 Groovy 沙箱的复选框,并且脚本只使用白名单中的安全方法,则允许脚本在未经批准的情况下运行。这节省了需要管理员批准的额外开销。

如果脚本中的任何方法不在白名单中, 脚本不允许运行,并标记错误,参考上述脚本批准的方法

七、Jenkins 凭证与 Vault 配合使用

待补充

参考

《Jenkins2权威指南》