你如何使用CURL访问使用Github OAuth的jenkins api

时间:2014-09-04 20:43:53

标签: api curl github oauth jenkins

我有一个使用Github OAuth插件的jenkins服务器,并在"授权应用程序" github的一部分,它在我的浏览器中工作正常,只要我用github进行身份验证,我就可以访问jenkins服务器。

有没有办法使用CURL或ruby客户端的oauth凭证/令牌访问jenkins服务器api?

我已在https://github.com/settings/applications生成了令牌 - >个人访问令牌 - >生成新令牌(没有选项将其范围限定为第三方应用程序)

该令牌可以正常访问github:

curl -H "Authorization: token cfbcff42e6a8a52a1076dd9fcxxxxxxxxxxxxxxx" https://api.github.com/user

但是,该令牌对jenkins-server无效:

curl -H "Authorization: token cfbcff42e6a8a52a1076dd9fcxxxxxxxxxxxxxxx" https://jenkins-server/user/restebanez/api/json/\?pretty\=true

它会生成此错误:

<html><head><meta http-equiv='refresh' content='1;url=/securityRealm/commenceLogin?from=%2Fuser%2Frestebanez%2Fapi%2Fjson%2F%3Fpretty%3Dtrue'/><script>window.location.replace('/securityRealm/commenceLogin?from=%2Fuser%2Frestebanez%2Fapi%2Fjson%2F%3Fpretty%3Dtrue');</script></head><body style='background-color:white; color:white;'>


    Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:

                        Permission you need to have (but didn't): hudson.model.Hudson.Read
 ... which is implied by: hudson.security.Permission.GenericRead
 ... which is implied by: hudson.model.Hudson.Administer
-->

</body></html>     

```

jenkins服务器安装了GitHub API Plugin 1.58和Github Authentication插件0.19

我可能错过了oauth b / c的一些基本原理我已经用谷歌搜索了一段时间而且我找不到任何东西

4 个答案:

答案 0 :(得分:14)

我不确定你是否已经深究这一点,但在尝试了几条路线后,我终于在Jenkins上使用Github OAuth进行了脚本化构建。诀窍是,对于GitHub,API令牌不是,而是来自Jenkins的API令牌。

对于我的设置,我在github上有一个机器用户,我通过网络正常登录该用户,然后点击右上角的用户名。从那里我点击了#34;配置&#34;在左侧菜单上,最后是#34; Show API Token&#34;在主要内容区域。

有一次,我可以跑:

curl --user <username>:<api_token> https://jenkins-server/user/<username>/api/json/?pretty=true

More information.

答案 1 :(得分:4)

您应该使用Jenkins API token。这是每个用户可配置的。见$JENKINS_URL/me

这将允许您的脚本客户端访问Jenkins,无论使用何种身份验证策略。

答案 2 :(得分:0)

你应该使用&#34; Basic&#34;而不是&#34;令牌&#34;

例如:

curl -H "Authorization: Basic cfbcff42e6a8a52a1076dd9fcxx" 
https://jenkins-server/user/restebanez/api/json

答案 3 :(得分:0)

这对我有用(以获取提交状态为例):

SetActive