使用REST / CLI将秘密文件凭据上传到Jenkins

15

我该如何使用REST API或Jenkins CLI创建Jenkins凭据?这个凭据应该是“秘密文件”类型,而不是用户名/密码组合。

这个问题类似于这个问题,但并非完全相同或重复。

3个回答

10
您可以按照以下步骤进行操作:
curl -X POST \
 https://jenkins.local/job/TEAM-FOLDER/credentials/store/folder/domain/_/createCredentials \
 -F secret=@/Users/maksym/secret \
 -F 'json={"": "4", "credentials": {"file": "secret", "id": "test", 
"description": "HELLO-curl", "stapler-class": 
"org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl", 
"$class": 
"org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl"}}'

今天刚刚完成了这项任务:通过API上传Jenkins秘密文件凭证


你找到更新现有凭据文件的方法了吗?使用不同的文件重复此请求会被忽略。 - doughgle
我必须通过API检查密钥是否存在,然后将其删除并上传新的密钥,我使用Ansible完成了这个任务,但遇到了相同的问题。 - lumaks
我收到了“HTTP错误403请求中未包含有效的面包屑”的错误信息。 - Maoz Zadok
您可以在此处检查有关该错误的多个选项 https://github.com/spinnaker/spinnaker/issues/2067 - lumaks

8
使用命令行创建Jenkins凭据,您可以使用create-credentials-by-xml命令:
java -jar jenkins-cli.jar -s <JENKINS_URL> create-credentials-by-xml  system::system::jenkins _ < credential-name.xml

了解此语法的最佳方法是手动创建凭据,然后转储它:

java -jar jenkins-cli.jar -s <JENKINS_URL> get-credentials-as-xml system::system::jenkins _ credential-name > credential-name.xml

那么,您可以将此XML示例用作模板,它应该是自我说明的。


2

如果您想更新现有的秘密文件,我发现最简单的方法是删除并重新创建。

一个删除请求,扩展 @lumaks 的答案(即使用相同的主机名、文件夹名和凭据 ID),看起来像这样:

curl -v -X POST \
-u "user:password" \
https://jenkins.local/job/TEAM-FOLDER/credentials/store/folder/domain/_/credential/test/doDelete

这将返回HTTP状态码302 Found404 Not Found,分别用于已存在和不存在的凭证文件。


有没有完整的Credentials Plugin API参考文档?在互联网上搜索有关它的信息有点困难。 - kirill.login

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接