Jenkins凭证概述
Jenkins凭证是用于在Jenkins中进行受限操作时的凭据,这些凭据通常包括密码、私钥文件等敏感信息。通过凭证管理,Jenkins能够安全地与第三方应用程序和系统进行交互,如代码仓库(如GitHub、Gitlab)、云存储系统等。
Jenkins凭证的使用
- 安装凭证插件:
- 要在Jenkins中使用凭证管理功能,首先需要安装Credentials Binding插件。这可以通过Jenkins的插件管理界面进行安装。
- 添加凭证:
- 登录Jenkins后,具有Credentials > Create权限的用户可以在“Manage Jenkins”->“Manage Credentials”中添加凭证。
- 在添加凭证时,需要选择凭证的类型(如Username with password、SSH Username with private key、Secret text等)、作用域(Global或System)以及为凭证指定一个ID和描述。
- 在Pipeline中使用凭证:
- 在Jenkins的Pipeline中,可以通过withCredentials步骤或credentials helper方法来使用凭证。
- 使用withCredentials步骤时,需要指定凭证的ID和变量名,以便在Pipeline的后续步骤中使用这些凭证。
- 使用credentials helper方法时,可以在environment指令中直接指定凭证ID,并将凭证值赋给一个环境变量。
Jenkins凭证的使用原因
Jenkins凭证的使用主要是出于安全考虑。通过凭证管理,可以避免在Jenkinsfile或Pipeline脚本中明文写入敏感信息,从而降低安全风险。此外,Jenkins凭证还支持加密存储和访问控制,进一步增强了安全性。
Jenkins凭证的优势
- 提高安全性:
- 通过加密存储和访问控制,Jenkins凭证能够保护敏感信息不被泄露。
- 凭证的使用还可以避免在代码库中明文存储密码等敏感信息。
- 简化配置:
- 凭证管理使得与第三方应用程序和系统的交互变得更加简单和方便。
- 管理员可以在Jenkins中集中管理所有凭证,而无需在每个项目或用户中单独配置。
- 增强可维护性:
- 通过凭证管理,可以更容易地更新和撤销敏感信息。
- 当凭证发生变化时,只需在Jenkins中更新凭证即可,无需修改Pipeline脚本或代码库。
使用场景
Jenkins凭证有多种类型
可以根据具体需求创建凭据比如但不限于:
- K8S 令牌
- Git仓库 权限
- 镜像仓库口令
- SSH密钥
示例
通常情况下,拉取从镜像仓库拉取代码可以直接使用镜像仓库口令方式使用,但是在一些比较特殊的情况下,可能是需要手动生成命令文件,可以使用如下方式生成类似docker的conf.jason文件,该段代码从凭据中读取DOCKER_CREDENTIAL
,并将DOCKER_PASSWORD
与DOCKER_USERNAME
赋值给passwordVariable
和usernameVariable
。使用base64构建数据并写入文件。
stage('DockerConfFile')
{
steps
{
container(name: 'kaniko', shell: '/busybox/sh')
{
script
{
// 使用 withCredentials 步骤来获取凭证
withCredentials([usernamePassword(credentialsId: "DOCKER_CREDENTIAL",
passwordVariable: 'DOCKER_PASSWORD',
usernameVariable: 'DOCKER_USERNAME')]) {
// 构建要编码的字符串
def authString = "${env.DOCKER_USERNAME}:${env.DOCKER_PASSWORD}"
// 将字符串编码为 Base64 需要在jenkins中添加允许getBytes方法 在这里添加scriptApproval
def encodedAuth = Base64.encoder.encodeToString(authString.getBytes("utf-8"))
// 构建 JSON 字符串
def authConfig =
"""
{
"auths": {
"${env.DOCKER_REGISTRY}": {
"auth": "${encodedAuth}"
}
}
}
"""
// 将 authConfig 写入一个临时文件
writeFile file: '/kaniko/.docker/config.json', text: authConfig
}
}
}
}
}