我正在尝试使用Raspberry Pi为我们的办公室墙创建一个完全自动化的Jenkins状态屏幕。我能够配置Pi以在电视上显示具有特定URL的浏览器,以及使用我们的构建作业配置Build Monitor Plugin in Jenkins。
我们的Jenkins使用基于矩阵的安全性,因此我创建了具有所需权限的单独raspberry
用户。 (手动登录后,墙上插件显示正确。)
我可以使用以下命令查看有效的HTTP答案:
curl "http://raspberry:0b45...06@localhost:8080/view/wall1/"
0b45...06
是raspberry
Jenkins用户的API令牌。 (从
http://localhost:8080/user/raspberry/configure
)
不幸的是,这种URL方案在图形浏览器中不起作用。我也尝试了令牌参数但没有成功:
$ curl "http://localhost:8080/view/wall1/?token=0b45...06"
<html><head>...</head><body ...>
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>
如何在浏览器(如Chromium或Midori)中获取无需登录的URL,并显示我的Jenkins视图?
我不想要任何手动步骤,包括登录(例如VNC),因为它不能很好地扩展到多个办公室/ Pis。
答案 0 :(得分:2)
我希望看到一个更简单的解决方案,但解决方法可能如下。
我创建了一个本地Apache代理,它侦听端口80,设置授权标头并使用以下Apache配置将请求转发到我们的Jenkins实例:
<VirtualHost 127.0.0.1:80>
ProxyRequests Off
ProxyPreserveHost Off
ProxyErrorOverride Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerExpire On
ProxyPass / https://jenkins.example.com/ nocanon
ProxyPassReverse / https://jenkins.example.com/
AllowEncodedSlashes NoDecode
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap https://jenkins.example.com/ /
SetEnv proxy-nokeepalive 1
<Location />
RequestHeader set Authorization "Basic {{ jenkins_basic_header }}"
Header edit Set-Cookie "Secure;" ""
Order allow,deny
Allow from all
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
(您可能需要微调SSL或其他参数,Apache调试日志可能会有所帮助。)
请注意从Cookie中删除安全标记的Header edit Set-Cookie "Secure;" ""
行。这是必需的,因为Jenkins使用https并发送secure cookies,而Apache代理仅在端口80上进行侦听。没有它,浏览器会将会话cookie(和其他cookie)作为安全cookie但不会重新发送一个普通的http连接。 (如果您的仪表板插件在每次调用时都使用新会话,那么这就是一个问题.Jenkins中链接的Build Monitor插件不支持它,它需要稳定的会话ID。)
如果Apache仅侦听localhost(ports.conf
),那么在Apache上使用https似乎有点过头了:
Listen 127.0.0.1:80
可以使用以下Python脚本生成jenkins_basic_header
变量:
#!/usr/bin/python
import base64
import errno
import sys
if len(sys.argv) != 3:
print('Missing user pass/token arguments')
print('Usage: ./basic-pass.py <user> <pass/token>')
sys.exit(errno.EINVAL)
hash = base64.b64encode(sys.argv[1] + ':' + sys.argv[2])
sys.stdout.write(hash) # do not print new-line char
它也适用于令牌。
答案 1 :(得分:1)
截至目前(2016年2月)我认为如果不编码实际登录raspberry
用户的某些脚本(greasemonkey或类似的?),切换到监视器墙视图之前,这是不可能的。
(或坚持你的代理解决方案)
Jenkins的JIRA实例中的这两张票显示目前似乎没有一个快速简便的解决方案,但你显然不是唯一一个看起来:
https://issues.jenkins-ci.org/browse/JENKINS-14750
https://issues.jenkins-ci.org/browse/JENKINS-22475
答案 2 :(得分:0)
您是否尝试过使用apiToken?
wget --auth-no-challenge --http-user=user --http-password=apiToken --secure-protocol=TLSv1 http://jenkins.yourcompany.com/job/your_job/build?token=TOKEN
您的个人配置页面中提供了API令牌。点击每个页面右上角的名称,然后点击“配置”以查看您的API令牌。
它适用于我的设置:
http://<URL>/view/BuildMonito/?token=<token>
答案 3 :(得分:0)
查看对How to share Jenkins BUILD Monitor
的回答 <块引用>然后您可以将匿名读取访问权限限制为您想要公开的仪表板视图。并要求对其他所有内容进行身份验证。