NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Linux

  • Docker

  • 云原生

  • Kubernetes

  • KubeSphere

  • K3S

  • 笔记

  • PVE

  • 维修

  • DevOps

    • DevOps最佳实践
    • Github Actions
    • Jenkins

      • 安装
      • 凭证(credentials)
        • 前言
        • 配置入口
        • 类型
          • Secret Text(Secret 文本)
          • Username with password(带密码的用户名)
          • Secret file(Secret 文件)
          • SSH Username with Private Key
        • 参考
      • 代理(agent)
      • 最佳实践
    • Coding

  • 云服务

  • 路由器

  • Hyper-V

  • Windows

  • macOS

  • 运维
  • DevOps
  • Jenkins
NipGeihou
2023-08-20
目录

凭证(credentials)

# 前言

曾经听过前辈经过的一句话,一个好的 Git 仓库应该是可以随时开源的,换言之,也就是说仓库中不应该出现任何秘钥信息,一旦开源(或泄露)必定存在安全风险,而 CI 脚本常常也存在与项目仓库中,脚本中不可避免会用到秘钥。

# 配置入口

  • Manage Jenkins
  • Security
  • 凭据(Credentials)
  • 全局
  • Add Credentials

# 类型

通用属性

  • ID:流水线必填,如 jenkins-aws-secret-key-id ,用于在流水线时调用 credentials('id')

# Secret Text(Secret 文本)

常用于存储第三方 API 的 Token

  • Secret:秘钥内容
pipeline {
    agent {
        // 此处定义 agent 的细节
    }
    environment {
        AWS_ACCESS_KEY_ID     = credentials('jenkins-aws-secret-key-id')
        AWS_SECRET_ACCESS_KEY = credentials('jenkins-aws-secret-access-key')
    }
    stages {
        stage('Example stage 1') {
            steps {
                // 
            }
        }
        stage('Example stage 2') {
            steps {
                // 
            }
        }
    }
}

# Username with password(带密码的用户名)

常用于存储账号、密码

  • 用户名:账号
  • Treat username as secret:将用户名视为秘钥,即不会在流水线输出中明文打印
  • 密码:密码
environment {
    BITBUCKET_COMMON_CREDS = credentials('jenkins-bitbucket-common-creds')
}

这实际设置了下面的三个环境变量:

  • BITBUCKET_COMMON_CREDS - 包含一个以冒号分隔的用户名和密码,格式为 username:password 。
  • BITBUCKET_COMMON_CREDS_USR - 附加的一个仅包含用户名部分的变量。
  • BITBUCKET_COMMON_CREDS_PSW - 附加的一个仅包含密码部分的变量。

# Secret file(Secret 文件)

常用于:

  • 太笨拙而不能直接输入 Jenkins(超长秘钥)
  • 二进制格式,比如 GPG 文件
  • File:秘钥文件

# SSH Username with Private Key

常用于存储 Jenkins 的私钥,通常是重新生成的,当然也可以从其他设备复制过来。

  • ID:如 jenkins-ssh-private-key
  • username:
  • Treat username as secret:将 username 视为秘钥
  • Private Key - Enter directly:选中,输入公私钥文本
  • Passphrase:口令短语
创建公私钥

在 Jenkins 的宿主机执行:

ssh-keygen
# 回车×N
cat ~/.ssh/id_rsa # 私钥,存储到Jenkins中
cat ~/.ssh/id_rsa.pub # 公钥,上传到Github等
// 通常在片段生成器中生成
withCredentials(bindings: [certificate(aliasVariable: '', \
                                       credentialsId: 'jenkins-certificate-for-xyz', \
                                       keystoreVariable: 'CERTIFICATE_FOR_XYZ', \
                                       passwordVariable: 'XYZ-CERTIFICATE-PASSWORD')]) {
  // some block
}
// 使用
node {
  withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
    sh /* 错误! */ """
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    """
    sh /* 正确 */ '''
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    '''
  }
}

# 参考

  • 使用 credentials (opens new window)
  • 使用 Jenkinsfile (opens new window)
上次更新: 2023/11/19, 11:33:20
安装
代理(agent)

← 安装 代理(agent)→

最近更新
01
Docker Swarm
04-18
02
安全隧道 - gost
04-17
03
Solana最佳实践
04-16
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式