问题描述
我在gitlab中有一个控制仓库,我想自动生成一个sshkey并通过gitlab api(使用Deploy Token)将其发送到我的存储库中。
这实际上是我想回答的简单问题。关于如何通过api将sshkey发送到gitlab的木偶有什么“(标准)”?我尝试使用此模块(https://forge.puppet.com/abrader/gms),但它不起作用。下面我将解释我已经做过的事情和尝试过的事情。
我已经通过转到“设置”->“存储库”->“部署令牌”生成了一个部署令牌。在这里,我得到了一个现在保存的随机字符串。
我已经能够自动生成一个名为“ manager-deploy-key”的密钥。我使用此模块生成密钥:https://forge.puppet.com/puppet/ssh_keygen
ssh-keygen代码
ssh_keygen { 'root':
bits => 4096,type => 'rsa',filename => '/root/.ssh/manager-deploy-key',}
然后,我想使用以下模块:“ https://forge.puppet.com/abrader/gms”将新生成的密钥作为部署密钥自动发送到我的仓库。
应发送deploykey
git_deploy_key { 'add_deploy_key_to_puppet_control':
ensure => present,name => $::fqdn,path => '/root/.ssh/manager-deploy-key.pub',token => 'DEPLOY_TOKEN_HERE',project_name => 'user/control-repo',server_url => 'https://gitlab.com',provider => 'gitlab',}
这失败了,因此我选择通过在命令中添加--debug进行调试->“ puppet apply --debug /file/test.pp”
查看调试信息,对GET请求的响应是
"{\"error\":\"API V3 is no longer supported. Use API V4 instead.\"}"
该模块无法正常工作...因此,我现在要使用curl来自动执行此操作。但是,我真的很想知道是否还有更简单的选择。
解决方法
看起来好像唯一的方法实际上是使用curl,因为不推荐使用该模块。如果有人需要示例,我已经为其设置了命令。
curl -H "PRIVATE-TOKEN: ${git_api_token}" -H "Content-Type: application/json" \
-X POST -d "{\"title\":\"${git_ssl_keyname}\",\"key\":\"${sslpub}\",\"can_push\":\"true\"}" \
"https://gitlab.com/api/v4/projects/${project_id}/deploy_keys"
git_api_token 是您在帐户上生成的令牌。我无法使用可以在项目中生成的部署令牌来完成这项工作。
git_ssl_keyname 是您的ssh密钥的名称。这可以是您想要的任何东西。
sslpub 是您要导入到项目中的实际密钥。
project_id 是您的项目的ID。如果您访问主项目页面,它将位于顶部附近。
如果您想了解有关gitlabs访问令牌api的更多信息,请访问https://docs.gitlab.com/ee/api/deploy_keys.html