1. 持续集成
  2. 词汇表

凭据管理

功能介绍

什么是凭据

CODING 将账号密码、API Token、公私钥对、证书这一类与访问权限相关的信息称之为凭据。

凭据的使用场景

许多第三方的应用或平台都可以与 CODING 的持续集成、持续部署、制品库等功能模块进行交互。例如,在 CODING 持续集成模块内拉取 GitHub 上的代码时, 若我们将 GitHub 的账号密码等重要信息硬编码在配置文件内,将会有极大的安全隐患。

为了最大限度提高安全性,您可以利用 CODING 的「凭据管理」功能存储相关的凭据。在使用凭据时,您可以将凭据 ID 写入到相关的配置文件中, 只通过凭据 ID 来换取凭据信息。

管理凭据

进入项目之后,点击页面左下角「项目设置」进入项目设置页面。

选择「开发者选项」->「凭据管理」进入凭据管理页面。该页面会列出所有已创建的凭据。

创建「SSH 私钥」类型的凭据

方式一:命令行创建

使用命令创建 SSH 密钥。注意私钥第一行应包含「BEGIN RSA PRIVATE KEY」,否则后续使用时可能会报错「invalid private key」。

ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
JvKE3WXugDp2YuswF4MAJq/o+R9kRKZzNfeM9A6NWjwjnIYP4yUVwqa/20MYmVpT
......
方式二:手动录入凭据
  1. 在凭据管理页面,点击右上角「录入凭据」。

  1. 在录入凭据页面,输入相关信息:
  • 选择「SSH 私钥」凭据类型
  • 输入凭据名称,必填项,长度不超过 255 个字符
  • 输入 SSH 私钥,必填项
  • 输入私钥口令,非必填
  • 输入描述,非必填
  1. 勾选需要授权的持续集成功能。只有进行凭据授权后,在使用 CODING 持续集成功能模块创建构建计划时才有权限使用该凭据。

  2. 点击「创建」即可完成创建。录入成功的凭据会显示在凭据管理页面。

创建「用户名 + 密码」类型的凭据

  1. 在凭据管理页面,点击右上角「录入凭据」。

  1. 在录入凭据页面,输入相关信息:
  • 选择「用户名 + 密码」凭据类型
  • 输入凭据名称,必填项,长度不超过 30 个字符
  • 输入用户名和密码,必填项
  • 输入描述,非必填
  1. 勾选需要授权的持续集成功能。只有进行凭据授权后,在使用 CODING 持续集成功能模块创建构建计划时才有权限使用该凭据。

  2. 点击「创建」即可完成凭据录入。录入成功的凭据会显示在凭据管理页面。

更新凭据

如需更新凭据,在凭据管理页面,点击该凭据的「编辑」,修改相关信息再保存即可更新该凭据。

删除凭据

如需删除凭据,在凭据管理页面,点击该凭据的「删除」。注意:移除凭据后使用本凭据的持续集成任务将会停止,请为其设置新的凭据。

在凭据的编辑页面,也可以进行删除凭据的操作。

凭据使用示例

以在 CODING 持续集成和制品库当中,使用「用户名 + 密码」类型的凭据为例,来演示凭据的使用方式。

在例子中,我们会通过 CODING 持续集成进行镜像构建与打包,并通过凭据 ID 将镜像推送到 CODING 制品库。在例子项目中需要:

  1. 代码中包含 Dockerfile 文件
  2. 准备一个 Docker 类型的制品库
  3. 准备一个「用户名 + 密码」的凭据
  4. 创建一个持续集成任务,并对该构建任务进行凭据授权

如下是准备进行持续构建的项目代码:

创建一个 Docker 类型的制品库

该制品仓库地址在配置持续集成任务时会被使用到。

创建一个「用户名 + 密码」的凭据

该凭据 ID 在配置持续集成任务时会被使用到。

配置一个持续集成任务

  1. 在持续集成中创建任务,使用模版的 Jenkinsfile ,参考如下配置文件将凭据 ID 放在 credentialsId 中,同时替换制品仓库地址。
pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
      }
    }
    stage('构建') {
      steps {
        echo '构建中...'
        sh 'docker version'
        echo '构建完成.'
        script {
          def exists = fileExists 'README.md'
          if (!exists) {
            writeFile(file: 'README.md', text: 'Helloworld')
          }
        }

        archiveArtifacts(artifacts: 'README.md', fingerprint: true)
      }
    }
    stage('测试') {
      steps {
        echo '单元测试中...'
        echo '单元测试完成.'
      }
    }
    stage('打包镜像') {
      steps {
        sh "docker build -t test:${env.GIT_BUILD_REF} -t anywhere-docker.pkg.coding.net/helloworld/helloworld/test:latest ."
      }
    }
    stage('镜像推送') {
      steps {
        script {
          try {
            withCredentials([usernamePassword(credentialsId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
              sh "echo ${REGISTRY_PASS} | docker login -u ${REGISTRY_USER} --password-stdin anywhere-docker.pkg.coding.net"
              sh "docker images"
              sh "docker push anywhere-docker.pkg.coding.net/helloworld/helloworld/test:latest"
            }
          } catch(err) {
            echo err.getMessage()
          }
        }
      }
    }
  }
}
  1. 对该构建任务进行凭据授权。

  1. 触发持续集成构建任务,可以看到任务运行成功。

同时镜像也正常推入到制品库中。

常见问题

  • 创建凭据会不会生成新的账号密码?

凭据管理仅是为了管理用户的私密信息,并不会在凭据管理中生成一对账号密码给用户使用。在凭据管理中,用户需要自己添加有效的凭据信息。

  • 将凭据 ID 直接写入到配置文件当中有没有安全隐患?

凭据 ID 属于可以公开信息,普通用户拿到了凭据 ID ,也无法简单通过凭据 ID 兑换到真正的凭证信息,只有在 CODING 持续集成等产品的运行环境中, 才可以通过 withCredentials 等命令获取到对应的凭据。

  • 使用凭据 ID 与 使用 CODING 持续集成中的「保密的环境变量」有什么区别?

两者都具有保密的特性,不同的是:凭据 ID 可以统一管理,您可以在多个持续集成任务中使用同一个凭据 ID;修改凭据内容时,也只需要在凭据管理中一处修改即可,不需要修改多处。

上一篇项目令牌
最近更新
感谢反馈有用
感谢反馈没用

在阅读中是否遇到以下问题?

您希望我们如何改进?