凭据管理
功能介绍
什么是凭据
CODING 将账号密码、API Token、公私钥对、证书这一类与访问权限相关的信息称之为凭据。
凭据的使用场景
许多第三方的应用或平台都可以与 CODING 的持续集成、持续部署、制品库等功能模块进行交互。例如,在 CODING 持续集成模块内拉取 GitHub 上的代码时, 若我们将 GitHub 的账号密码等重要信息硬编码在配置文件内,将会有极大的安全隐患。
为了最大限度提高安全性,您可以利用 CODING 的「凭据管理」功能存储相关的凭据。在使用凭据时,您可以将凭据 ID 写入到相关的配置文件中, 只通过凭据 ID 来换取凭据信息。
管理凭据
进入项目之后,点击页面左下角「项目设置」进入项目设置页面。
选择「开发者选项」->「凭据管理」进入凭据管理页面。该页面会列出所有已创建的凭据。
创建「SSH 私钥」类型的凭据
方式一:命令行创建
使用命令创建 SSH 密钥。注意私钥第一行应包含「BEGIN RSA PRIVATE KEY」,否则后续使用时可能会报错「invalid private key」。执行命令行时,请根据界面提示点击 Enter 键确认。
ssh-keygen -m PEM -t ed25519 -C "your.email@example.com"
cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
JvKE3WXugDp2YuswF4MAJq/o+R9kRKZzNfeM9A6NWjwjnIYP4yUVwqa/20MYmVpT
......
方式二:手动录入凭据
- 在凭据管理页面,点击右上角「录入凭据」。
- 在录入凭据页面,输入相关信息:
- 选择「SSH 私钥」凭据类型
- 输入凭据名称,必填项,长度不超过 255 个字符
- 输入 SSH 私钥,必填项
- 输入私钥口令,非必填
- 输入描述,非必填
勾选需要授权的持续集成功能。只有进行凭据授权后,在使用 CODING 持续集成功能模块创建构建计划时才有权限使用该凭据。
点击「创建」即可完成创建。录入成功的凭据会显示在凭据管理页面。
创建「用户名 + 密码」类型的凭据
- 在凭据管理页面,点击右上角「录入凭据」。
- 在录入凭据页面,输入相关信息:
- 选择「用户名 + 密码」凭据类型
- 输入凭据名称,必填项,长度不超过 30 个字符
- 输入用户名和密码,必填项
- 输入描述,非必填
勾选需要授权的持续集成功能。只有进行凭据授权后,在使用 CODING 持续集成功能模块创建构建计划时才有权限使用该凭据。
点击「创建」即可完成凭据录入。录入成功的凭据会显示在凭据管理页面。
更新凭据
如需更新凭据,在凭据管理页面,点击该凭据的「编辑」,修改相关信息再保存即可更新该凭据。
删除凭据
如需删除凭据,在凭据管理页面,点击该凭据的「删除」。注意:移除凭据后使用本凭据的持续集成任务将会停止,请为其设置新的凭据。
在凭据的编辑页面,也可以进行删除凭据的操作。
凭据使用示例
以在 CODING 持续集成和制品库当中,使用「用户名 + 密码」类型的凭据为例,来演示凭据的使用方式。
在例子中,我们会通过 CODING 持续集成进行镜像构建与打包,并通过凭据 ID 将镜像推送到 CODING 制品库。在例子项目中需要:
- 代码中包含 Dockerfile 文件
- 准备一个 Docker 类型的制品库
- 准备一个「用户名 + 密码」的凭据
- 创建一个持续集成任务,并对该构建任务进行凭据授权
如下是准备进行持续构建的项目代码:
创建一个 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()
}
}
}
}
}
}
- 对该构建任务进行凭据授权。
- 触发持续集成构建任务,可以看到任务运行成功。
同时镜像也正常推入到制品库中。
常见问题
- 创建凭据会不会生成新的账号密码?
凭据管理仅是为了管理用户的私密信息,并不会在凭据管理中生成一对账号密码给用户使用。在凭据管理中,用户需要自己添加有效的凭据信息。
- 将凭据 ID 直接写入到配置文件当中有没有安全隐患?
凭据 ID 属于可以公开信息,普通用户拿到了凭据 ID ,也无法简单通过凭据 ID 兑换到真正的凭证信息,只有在 CODING 持续集成等产品的运行环境中, 才可以通过 withCredentials 等命令获取到对应的凭据。
- 使用凭据 ID 与 使用 CODING 持续集成中的「保密的环境变量」有什么区别?
两者都具有保密的特性,不同的是:凭据 ID 可以统一管理,您可以在多个持续集成任务中使用同一个凭据 ID;修改凭据内容时,也只需要在凭据管理中一处修改即可,不需要修改多处。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。