凭据管理
功能介绍
什么是凭据
CODING 将账号密码 / API Token / 公私钥对 / 证书这一类与访问权限相关的信息称之为凭据 。
凭据的使用场景
许多第三方的应用或平台都可以与 CODING 的持续集成、持续部署、制品库等产品进行交互,如: 在 CODING 持续集成内拉取 GitHub 上的代码, 若我们将 GitHub 的账号密码等重要信息硬编码在配置文件内,将会有极大的安全隐患。
为了最大限度的提高安全性,您可以在 CODING 的凭据管理中,存储相关的凭据。在使用凭据时,您可以将凭据 ID 写入到相关的配置文件中, 只通过凭据 ID 来换取凭据信息。
查看凭据列表
在项目页面,点击导航栏左下角【项目设置】->【开发者选项】->【凭据管理】进入凭据列表页面。
您可以在列表页面迅速了解已创建凭据的情况:
列表属性 | 说明 |
---|---|
凭据类型 | 凭据类型暂支持【用户名+密码】、【 SSH 私钥】、【云 API 密钥】、【腾讯云临时授权】、【 Kubernetes 凭据】、【 Android 签名证书】。 |
凭据名称 | 请输入凭据名称,不超过 30 个字符。 |
各凭据所需填写的内容 | 按照提示输入相对应的信息。 |
管理凭据
您可以对凭据进行编辑、删除等操作。
创建【 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
......
- 在凭据列表页面点击【录入凭据】。
- 在录入凭据页面,输入相关信息:
选择【 SSH 私钥】类别
输入凭据名称,必填项,长度不超过 255 个字符
输入 SSH 私钥,必填项
输入私钥口令,非必填
输入描述,非必填
点击【录入凭据】。
更新【 SSH 私钥】类型的凭据
在凭据列表页面,点击【编辑】按钮。
在凭据修改页面,可按需修改:
凭据范围
凭据名称
SSH 私钥
私钥口令
描述
点击【保存修改】。
创建【用户名 + 密码】类型的凭据
- 在凭据列表页面点击【录入凭据】。
- 在录入凭据页面,输入相关信息:
选择【用户名 + 密码】类别
输入凭据名称,必填项,长度不超过 30 个字符
输入用户名和密码,必填项
输入描述,非必填
点击【录入凭据】。
更新【用户名 + 密码】类型的凭据
在凭据列表页面,点击【编辑】按钮。
在凭据修改页面,可按需修改:
凭据范围
凭据名称
用户名和密码
描述
点击【保存修改】。
移除凭据
在凭据的编辑页面,可以进行移除凭据的操作。注意:移除凭据后使用本凭据的持续集成任务将会停止,请为其设置新的凭据。
凭据授权
只有进行凭据授权后,持续集成 Job 才有权限使用该凭据。
- 在凭据列表页面,点击凭据的【编辑】按钮。
- 对需要授权的持续集成功能进行勾选。
凭据使用示例
以在 CODING 持续集成和制品库当中,使用【用户名 + 密码】类型的凭据为例,来演示凭据的使用方式。
在例子中,我们会通过 CODING 持续集成进行镜像构建与打包,并通过凭据 ID 将镜像推送到 CODING 制品库。在例子项目中需要:
- 代码中需包含 Dockerfile 文件
- 准备一个 Docker 类型的制品库
- 准备一个【用户名 + 密码】的凭据
- 创建一个持续集成任务,并对该 job 进行凭据授权
如下是准备进行持续构建的项目代码:
创建一个 Docker 类型的制品库
该制品仓库地址在配置持续集成任务时会使用到。
创建一个【用户名 + 密码】的凭据
该凭据 ID 在配置持续集成任务时会使用到。
配置一个持续集成任务
- 在持续集成中创建任务,使用模版的 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()
}
}
}
}
}
}
- 对该 job 进行凭据授权。
- 触发持续集成 job,可以看到 job 运行成功。
同时镜像也正常推入到制品库中。
常见问题
- 创建凭据会不会生成新的账号密码 ?
凭据管理仅是为了管理用户的私密信息,并不会在凭据管理中生成一对账号密码给用户使用。在凭据管理中,用户需要自己添加有效的凭据信息。
- 将凭据 ID 直接写入到配置文件当中有没有安全隐患 ?
凭据 ID 属于可以公开信息,普通用户拿到了凭据 ID ,也无法简单通过凭据 ID 兑换到真正的凭证信息,只有在 CODING 持续集成等产品的运行环境中, 才可以通过 withCredentials 等命令获取到对应的凭据。
- 使用凭据 ID 与 使用 CODING 持续集成中的【保密的环境变量】有什么区别 ?
两者都具有保密的特性,不同的是:凭据 ID 可以统一管理,您可以在多个持续集成任务中使用同一个凭据 ID;修改凭据内容时,也只需要在凭据管理中一处修改即可,不需要修改多处。
在阅读中是否遇到以下问题?
您希望我们如何改进?