如何过帐到Jenkins以使用基本身份验证标头构建作业?

时间:2019-07-03 09:35:55

标签: jenkins curl opsgenie

我正在尝试配置一个知名的事件管理工具,以对Jenkins职位构建URL执行POST请求,以响应某些警报。

在此工具中,出于某些原因我无法放置 Jenkins作业构建端点如下:

https://<user>:<apiToken>@my-jenkins.com/blabla/job/blabla/build?token=<myTokenName>

因此,该工具提供的唯一替代方法是将授权详细信息作为标题

在此之前,我正在尝试使用curl 来检查是否可行。因此,我使用以下curl命令使用基本身份验证标题调用该詹金斯URL:

curl -X POST -H 'Authorization:Basic <user:apiToken in base64>' -H 'Jenkins-Crumb:<my-crumb>' 'https://my-jenkins.com/blabla/job/blabla/build?token=<myTokenName>'

但是给我一个 401:未经授权(用户:my-user的无效密码/令牌)。如果我在URL中放置的凭据与第一个代码段相同,那么它将起作用。

我已阅读以下文档:https://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients,并且似乎设置Basic auth标头很简单,但是我认为我在这里缺少了一些东西,因为当我使用{{ 1}}。

我也用Google搜索了一下,似乎每个人都用URL中的curl来调用Jenkins职位构建URL,但是正如我提到的,该工具不允许放置这样的URL。

有没有人使用基本的auth标头执行Jenkins职位发布?

任何帮助将不胜感激。非常感谢!

2 个答案:

答案 0 :(得分:0)

好的...很令人尴尬,但似乎我正在用macOS命令行shell生成base64字符串,但是它没有用。

我对Postman进行了同样的操作以生成auth标头,现在它可以正常工作了...

希望能以某种方式帮助某人。

答案 1 :(得分:0)

我面临着同样的问题。下面是我的解决方案。

  1. 在IAP后面和Jenkins前面使用Nginx代理
  2. 为Jenkins使用新的标头,而不是“授权”。对我来说,我使用了“ Jenkins授权”标题。
  3. 在Nginx配置中,我使用“ proxy_set_header”从“ Jenkins-Authorization”设置“ Authorization”标头。
  4. 在Nginx配置中,使用内部IP将proxy_pass传递到上游Jenkins服务器

Nginx配置:

upstream app {
    server jenkin_internal_ip:8080;
}
server {
    listen 80 default_server;

    charset utf-8;

    location / {
        include proxy_params;
        proxy_set_header Authorization $http_jenkins_authorization;
        proxy_pass http://app;
        proxy_redirect off;
    }
}

  • 请记住在Nginx配置中将“ jenkin_internal_ip”替换为您的Jenkins内部IP。