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

问题描述 投票:0回答:3

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

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

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

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

在此之前,我尝试使用 curl

 来检查这是否有效。因此,我使用基本身份验证标头调用 Jenkins URL,并使用以下 curl
 命令:

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,似乎设置基本身份验证标头非常简单,但我认为我错过了一些东西在这里,因为当我使用 curl

 时它对我不起作用。

我还用 Google 搜索了一下,似乎每个人都在 URL 中使用

user:apiToken

 来调用 Jenkins 作业构建 URL,但正如我提到的,该工具不允许放置这样的 URL。

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

如有任何帮助,我们将不胜感激。非常感谢!

jenkins curl opsgenie
3个回答
3
投票
好吧...相当尴尬,但似乎我正在使用 macOS 命令行 shell 生成 base64 字符串,但它不起作用。

我对 Postman 做了同样的事情来生成身份验证标头,现在它正在工作......

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


1
投票
我也遇到了同样的问题。以下是我的解决方案。

    在 IAP 后面和 Jenkins 前面使用 Nginx 代理
  1. 使用 Jenkins 的新标头而不是“授权”。对我来说,我使用了“Jenkins-Authorization”标头。
  2. 在 Nginx 配置中,我使用“proxy_set_header”从“Jenkins-Authorization”设置“Authorization”标头。
  3. 在 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。

0
投票
Jenkins 使用基本身份验证。您可以像这样创建 Base64 加密:

echo -n username:pass | base64
-n 标志将从您输入的 Base64 二进制文件中删除换行符。并且,然后可以用作,

curl -X POST --header "Authorization: Basic <your_base64_encrypted_value==>" "https://jenkins.url/job/jobname/buildWithParameters?token=token_value&param1=value1"
    
© www.soinside.com 2019 - 2024. All rights reserved.