'curl: option ----- END: неизвестно' с использованием curl для загрузки открытого ключа в учетные данные SSH jenkins - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь использовать эту команду curl для загрузки закрытого ключа в учетные данные Jenkins SSH:

JENKINS_PRIVATE_KEY_AS_STRING='-----BEGIN RSA PRIVATE KEY----- MIIEo...2qwu8diE -----END RSA PRIVATE KEY-----'

curl -H $CRUMB -X POST "http://$USER:$API_TOKEN@$JENKINS_HOST/credentials/store/system/domain/_/createCredentials" \
--data-urlencode "json={
  "": "0",
  "credentials": {
    "scope": "GLOBAL",
    "id": "jenkins-ssh",
    "username": "jenkins",
    "password": "",
    "privateKeySource": {
      "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource",
      "privateKey": "$JENKINS_PRIVATE_KEY_AS_STRING",
    },
    "description": "jenkins-ssh-credentials",
    "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
  }
}"

Но когда я запускаю вышеописанное, происходит сбой с:

curl: option -----END: is unknown
curl: try 'curl --help' or 'curl --manual' for more information

Почему строка в переменной $JENKINS_PRIVATE_KEY_AS_STRING вызывает ошибку и как ее исправить?

Основываясь на ответе ниже, я также попробовал:

curl -H $CRUMB -X POST "http://$USER:$API_TOKEN@$JENKINS_HOST/credentials/store/system/domain/_/createCredentials" \
--data-urlencode "json={
  \"\": \"0\",
  \"credentials\": {
    \"scope\": \"GLOBAL\",
    \"id\": \"jenkins-ssh\",
    \"username\": \"jenkins\",
    \"password\": \"\",
    \"privateKeySource\": {
      \"stapler-class\": \"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource\",
      \"privateKey\": \"$JENKINS_PRIVATE_KEY_AS_STRING\",
    },
    \"description\": \"jenkins-ssh-credentials\",
    \"stapler-class\": \"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey\"
  }
}"

Но это дает ошибку:

: Specified type class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey is not assignable to the expected class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource
    at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:671)
Caused: java.lang.IllegalArgumentException: Failed to instantiate class com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource from {"stapler-class":"com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey","privateKey":"-----BEGIN RSA PRIVATE KEY----- MIIEo...2qwu8diE -----END RSA PRIVATE KEY-----"}
    at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:680)
    at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
    at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:777)
Caused: java.lang.IllegalArgumentException: Failed to convert the privateKeySource parameter of the constructor public com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey(com.cloudbees.plugins.credentials.CredentialsScope,java.lang.String,java.lang.String,com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$PrivateKeySource,java.lang.String,java.lang.String)

Но не уверен, что это связано с завитком.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Нашли решение, основанное на посте:

Сохранить JSON напрямую в bash-скрипте с переменными?

Так что хитрость заключалась в том, чтобы заключить переменную в кавычки следующим образом: "'"$JENKINS_PRIVATE_KEY_AS_STRING"'".Полный рабочий пример:

curl -H $CRUMB -X POST "http://$USER:$API_TOKEN@$JENKINS_HOST/credentials/store/system/domain/_/createCredentials" \
--data-urlencode 'json={
  "": "0",
  "credentials": {
    "scope": "GLOBAL",
    "id": "jenkins-ssh",
    "username": "jenkins",
    "password": "",
    "privateKeySource": {
      "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource",
      "privateKey": "'"$JENKINS_PRIVATE_KEY_AS_STRING"'",
    },
    "description": "jenkins-ssh-credentials",
    "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
  }
}'
0 голосов
/ 04 октября 2018

Вам нужно исправить кавычку аргумента:

                 v
--data-urlencode "json={
  "": "0",
  ^

Вместо этого экранируйте " символов, которые появляются в строке аргумента:

--data-urlencode "json={
  \"\": \"0\",
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...