首页 > 其他分享 >Jenkins 凭证管理 - 看这一篇就够了~

Jenkins 凭证管理 - 看这一篇就够了~

时间:2023-06-12 15:37:19浏览次数:34  
标签:Credential 凭证 credentials 就够 SSH jenkins Jenkins ID

许多三方网站和应用可以与Jenkins交互,如Artifact仓库,基于云的存储系统和服务等. 在Jenkins中添加/配置credentials,Pipeline项目就可以使用 credentials 与三方应用交互

Jenkins 凭证管理 - 看这一篇就够了~_git

Credential 类型

参考: jenkins.io/zh/doc/book…

Jenkins可以存储以下类型的credentials:

  • Secret text - API token之类的token (如GitHub个人访问token)
  • Username and password - 可以为独立的字段,也可以为冒号分隔的字符串:username:password(更多信息请参照 处理 credentials)
  • Secret file - 保存在文件中的加密内容
  • SSH Username with private key - SSH 公钥/私钥对
  • Certificate - a PKCS#12 证书文件 和可选密码
  • Docker Host Certificate Authentication credentials.

Credential 安全

为了最大限度地提高安全性,在Jenins中配置的 credentials 以加密形式存储在Jenkins 主节点上(用Jenkins ID加密),并且 只能通过 credentials ID 在Pipeline项目中获取

这最大限度地减少了向Jenkins用户公开credentials真实内容的可能性,并且阻止了将credentials复制到另一台Jenkins实例

Credential 创建

  • 选择适合的凭证类型
  • 创建 “Username and password” 凭证
  • Jenkins 凭证管理 - 看这一篇就够了~_字段_02

  • 创建 “SSH Username with private key” 凭证

Credential ID 定义

  • 在 ID 字段中,必须指定一个有意义的Credential ID- 例如 jenkins-user-for-xyz-artifact-repository。注意: 该字段是可选的。 如果您没有指定值, Jenkins 则Jenkins会分配一个全局唯一ID(GUID)值。
  • 请记住: 一旦设置了credential ID,就不能再进行更改。

Credential 使用

参考: www.jenkins.io/doc/book/pi…

存储在Jenkins中的credentials可以被使用:

  1. 适用于Jenkins的任何地方 (即全局 credentials),
  2. 通过特定的Pipeline项目/项目 (在 处理 credentials 和 使用Jenkinsfile部分了解更多信息),
  3. 由特定的Jenkins用户 (如 Pipeline 项目中创建 Blue Ocean的情况).
  • Blue Ocean 自动生成一个 SSH 公共/私有密钥对, 确保 SSH 公共/私有秘钥对在继续之前已经被注册到你的Git服务器

实际使用中,下面几个场景会用到creential

  • gitlab 访问、API调用
  • jenkins slave 创建

Credential 相关插件

注意: 上述 Credential 类型都依赖于 jenkins插件,同样jenkins pipeline 也需要这些插件的安装以支持代码片段

  • Credentials Binding: plugins.jenkins.io/credentials…
  • For secret text, usernames and passwords, and secret files
environment {
MAGE_REPO_CREDENTIALS = credentials('COMPOSER_REPO_MAGENTO')
COMPOSER_AUTH = """{
  "http-basic": {
      "repo.magento.com": {
          "username": "${env.MAGE_REPO_CREDENTIALS_USR}",
          "password": "${env.MAGE_REPO_CREDENTIALS_PSW}"
      }
  } }"""
}
  • For other credential types
withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
// available as an env variable, but will be masked if you try to print it out any which way
// note: single quotes prevent Groovy interpolation; expansion is by Bourne Shell, which is what you want
sh 'echo $PASSWORD'
// also available as a Groovy variable
echo USERNAME
// or inside double quotes for string interpolation
echo "username is $USERNAME"
}
  • Jenkins Plain Credentials Plugin: plugins.jenkins.io/plain-crede…
  • SSH Credentials: plugins.jenkins.io/ssh-credent…

最佳实践

  • 为了便于管理和使用, 强烈建议使用统一的约定来指定credential ID
  • 建议使用类似下面的format做为credential ID, 便于jenkinsfile开发时直接使用,同时在”描述“里写清楚credential的作用
    gitlab-api-token、gitlab-private-key、gitlab-userpwd-pair、harbor-xxx-xxx

实践:

  • 如下所示,将凭证使用统一的ID命名之后,便于复用,凭证定义一次,可多次,多个地方统一使用,无论是后期维护,复用都非常方便!
environment {
        // HARBOR="harbor.devopsing.site"
        HARBOR_ACCESS_KEY = credentials('harbor-userpwd-pair')
        SERVER_ACCESS_KEY = credentials('deploy-userpwd-pair')
            }
    .....

    docker login --username=${HARBOR_ACCESS_KEY_USR} --password=${HARBOR_ACCESS_KEY_PSW} ${HARBOR}

    sshpass -p "${SERVER_ACCESS_KEY_PSW}" ssh -o StrictHostKeyChecking=no ${SERVER_ACCESS_KEY_USR}@${DEPLOY_SERVER} "$runCmd"

标签:Credential,凭证,credentials,就够,SSH,jenkins,Jenkins,ID
From: https://blog.51cto.com/devopsingroad/6462915

相关文章

  • 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理
    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view,只能看到自己项目的jenkinsjob.但是,jenkins默认的权限管理体系不支持用户组或角色的配置,这里利用Role-basedAuthorizationStrategy实现上述目的权限角色配置直接跳过......
  • 快速创建Jenkins Job
    JenkinsJob类型1.Freestyleproject这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能.2.Pipeline真实的工作环境有很多job,比如先编译,然后执行静态代码检查、单元测试、然后部署服务器、......
  • 【Jenkins系列】-Pipeline语法全集
    Jenkins为您提供了两种开发Pipeline的方式:脚本式和声明式。脚本式流水线(也称为“传统”流水线)基于Groovy作为其特定于域的语言。而声明式流水线提供了简化且更友好的语法,并带有用于定义它们的特定语句,而无需学习Groovy。声明式流水线语法错误在脚本开始时报告。这是一个很好的功能,......
  • Jenkins + Docker 一键自动化部署 Spring Boot 项目,步骤齐全,少走坑路!
    本文章实现最简单全面的Jenkins+docker+springboot一键自动部署项目,步骤齐全,少走坑路。环境:centos7+git(gitee)简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。推荐一个开源免费的SpringBoot实战项目:https://......
  • 脚本安装Dockerfile安装Jenkins
    #1.编写Docker安装脚本[root@ip-10-0-12-212~]#vimIns_Docker.sh#!/usr/bin/bash#Author:wl#Time:2023-06-0911:54:22#Name:Ins_Docker.sh#Version:1.0#Discription:Tosource/etc/init.d/functionsrely_software=(yum-utilsdevice-mapper-persistent-......
  • Docker安装Jenkins报错后升级Centos7升级内核
    很久没碰docker了,昨晚在虚拟机上用dockerpulljenkinsci/blueocean安装Jenkins启动报如下错误:java.net.UnknownHostException:updates.jenkins.io最后发现容器pingdocker0都是不通的,尴尬,想想应该是内核或docker版本的问题,安装的centos7内核版本是3.10,升级到最新稳定版5.x后重......
  • jenkins中的坑_CreateProcess error=1392
    环境:windows11,jdk1.8,jenkins_2.346.war起因最近在使用jenkins部署项目的时候,填写仓库的url地址时,发现填完后报500这个错误,于是我打开jenkins的控制台,发现了这个报错,***java.io.IOException:CreateProcesserror=1392,文件或目录损坏且无法读取。***我就把这个错误信息去百度......
  • jenkinsapi的基础用法
    前言:想要用脚本或代码来触发Jenkins工程?不妨看看这里~模块安装pipinstalljenkinsapi或者easy_installjenkinsapi基础案例fromjenkinsapi.jenkinsimportJenkinsjenkins=Jenkins("http://*****.com:8080/",username="****",password="****",......
  • 重置Jenkins的build序号
    摘自:https://www.jianshu.com/p/e342b52d45e1找到Jenkins的脚本命令行的输入位置,如下图 复制下边的脚本,改成自己的工程名称,点击执行。okitem=Jenkins.instance.getItemByFullName("your-job-name-here")//THISWILLREMOVEALLBUILDHISTORYitem.builds.each(){b......
  • 用友清除出纳和其他单据锁定及处理出纳制单提示:选中的日记账中包含了已制单但没有成功
    --清除出纳单据锁定select*fromCN_LockAcctBookdeleteCN_LockAcctBook--系统管理清除单据锁定表select*fromLockVouchdeleteLockVouch处理出纳日记账凭证不成功提示: --查询出纳制单不成功记录项select*fromCN_AcctBookwhereacctdate='2023-05-31'andvouc......