0

我在 gitlab 中有一个控制存储库,我想自动生成一个 sshkey 并通过 gitlab api(使用部署令牌)将其发送到我的存储库。

这实际上是一个我想回答的直截了当的问题。关于如何通过其 api 将 sshkey 发送到 gitlab 的木偶的(或有任何)“标准”是什么?我试过使用这个模块(https://forge.puppet.com/abrader/gms),但它不起作用。下面我解释我所做的和尝试的。

我通过转到 Settings->Repository->Deploy Tokens 生成了一个部署令牌。在这里,我得到了一个我现在保存的随机字符串。

我已经能够自动生成一个名为“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 自己来自动化它。但是,我真的很想知道是否有更简单的选择。

4

1 回答 1

0

似乎唯一的方法是使用 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

于 2020-11-21T18:08:19.857 回答