3

我正在尝试配置一个著名的事件管理工具来执行对 Jenkins 作业构建 URL 的 POST 请求以响应一些警报。

在这个工具中,由于某种原因,我无法将Jenkins 作业构建端点如下所示:

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

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

在此之前,我正在尝试使用curl. 出于这个原因,我使用以下curl命令调用带有 Basic auth 标头的 Jenkins 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: Not authorized (Invalid password/token for user: my-user)。如果我在 URL 中放置与第一个代码片段相同的凭据,它就可以工作。

我已阅读以下文档:https ://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients似乎设置基本身份验证标头非常简单,但我认为我在这里遗漏了一些东西,因为它当我使用curl.

我也用谷歌搜索了一下,似乎每个人都在 URL 中调用 Jenkins 作业构建 URL user:apiToken,但正如我所提到的,该工具不允许放置这样的 URL。

有没有人使用基本的身份验证标头执行 Jenkins 工作启动?

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

4

2 回答 2

2

Okay... Quite embarrasing but it seems that I was generating the base64 string with my macOS command line shell, but it wasn't working.

I did the same with Postman to generate the auth header and now it's working...

Hope that helps someone, somehow.

于 2019-07-03T09:52:16.717 回答
1

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

  1. 在 IAP 后面和 Jenkins 前面使用 Nginx 代理
  2. 为 Jenkins 使用新标头而不是“授权”。对我来说,我使用了“Jenkins-Authorization”标题。
  3. 在 Nginx 配置中,我使用“proxy_set_header”从“Jenkins-Authorization”设置“Authorization”标头。
  4. 在 Nginx 配置中,proxy_pass 使用内部 IP 到上游 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。
于 2020-02-26T11:20:30.917 回答