buildbot中没有网格/控制台视图,尽管构建成功,构建视图也始终为空

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

我已经安装了buildbot-一个带有主服务器的docker映像,另一个带工作人员的docker映像。允许容器间联网,并且它们共享同一网络;我也有一个gitea实例,并安装了buildbot_gitea插件。

[到目前为止,我有一个小的项目可以在推送后在工作程序上运行make,并且buildbot正确地将成功报告回给gitea(我可以从日志中看出来,并且gitea还在回购中显示绿色的检查图像)。

但是,

  • 瀑布视图始终是空的;控制台和网格视图不会加载(它们显示“正在加载”动画,并且永远不会完成);
  • 在“主页” buildbot选项卡中,有时会显示最近的构建列表,有时却没有。 (但是最近的构建数量总是正确的)
  • 如果我单击其中一个构建(成功与否,都无所谓),它将显示一个构建页面,但是为空(没有构建步骤,没有构建属性,什么都没有。)

在主日志上看起来唯一奇怪的是定期超时消息,一些连接断开消息:

2020-03-21 12:11:26+0000 [-] Timing out client: IPv4Address(type='TCP', host='172.27.0.1', port=56388)
2020-03-21 12:11:26+0000 [-] Timing out client: IPv4Address(type='TCP', host='172.27.0.1', port=56380)
2020-03-21 12:11:26+0000 [-] Timing out client: IPv4Address(type='TCP', host='172.27.0.1', port=56392)

2020-03-21 12:19:40+0000 [-] dropping connection to peer tcp4:172.27.0.1:56598 with abort=False: None

和此:

2020-03-21 12:10:49+0000 [-] Unhandled error in Deferred:
2020-03-21 12:10:49+0000 [-] Unhandled Error
    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.8/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/_threads/_threadworker.py", line 46, in work
        task()
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/_threads/_team.py", line 190, in doWork
        task()
    --- <exception caught here> ---
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/python/threadpool.py", line 250, in inContext
        result = inContext.theWork()
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/python/threadpool.py", line 266, in <lambda>
        inContext.theWork = lambda: context.call(ctx, func, *args, **kw)
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/python/context.py", line 122, in callWithContext
        return self.currentContext().callWithContext(ctx, func, *args, **kw)
      File "/bbot/sandbox/lib/python3.8/site-packages/twisted/python/context.py", line 85, in callWithContext
        return func(*args,**kw)
      File "/bbot/sandbox/lib/python3.8/site-packages/buildbot/buildbot_net_usage_data.py", line 204, in _sendBuildbotNetUsageData
        res = _sendWithRequests(PHONE_HOME_URL, data)
      File "/bbot/sandbox/lib/python3.8/site-packages/buildbot/buildbot_net_usage_data.py", line 197, in _sendWithRequests
        r = requests.post(url, json=data)
      File "/bbot/sandbox/lib/python3.8/site-packages/requests/api.py", line 119, in post
        return request('post', url, data=data, json=json, **kwargs)
      File "/bbot/sandbox/lib/python3.8/site-packages/requests/api.py", line 61, in request
        return session.request(method=method, url=url, **kwargs)
      File "/bbot/sandbox/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
        resp = self.send(prep, **send_kwargs)
      File "/bbot/sandbox/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
        r = adapter.send(request, **kwargs)
      File "/bbot/sandbox/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
        raise ConnectionError(e, request=request)
    requests.exceptions.ConnectionError: HTTPSConnectionPool(host='events.buildbot.net', port=443): Max retries exceeded with url: /events/phone_home (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7ff7297704f0>: Failed to establish a new connection: [Errno 110] Operation timed out'))

这似乎只发生一次(为什么buildbot仍然试图打电话给家?在我的任何配置文件中都没有提到events.buildbot.net

docker容器具有完全的网络访问权限,ipv6,路由和DNS都很好(已通过buildbot-master图像进行了测试。

这是我的master.cfg

import os

from twisted.application import service
from buildbot.master import BuildMaster

from buildbot.plugins import *
from buildbot_gitea.auth import GiteaAuth
from buildbot_gitea import *

basedir = '/bbot/bbot-master'
rotateLength = 10000000
maxRotatedFiles = 10
configfile = 'master.cfg'

umask = None

if basedir == '.':
    basedir = os.path.abspath(os.path.dirname(__file__))
application = service.Application('buildmaster')
from twisted.python.logfile import LogFile
from twisted.python.log import ILogObserver, FileLogObserver
logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength,
                                maxRotatedFiles=maxRotatedFiles)
application.setComponent(ILogObserver, FileLogObserver(logfile).emit)

m = BuildMaster(basedir, configfile, umask)
m.setServiceParent(application)
m.log_rotation.rotateLength = rotateLength
m.log_rotation.maxRotatedFiles = maxRotatedFiles# -*- python -*-                                                                                                                                                                                                                                                       
# ex: set filetype=python:                                                                                                                                                                                                                                                                                             

from buildbot.plugins import *


c = BuildmasterConfig = {}
####### WORKERS                                                                                                                                                                                                                                                                                                        

c['workers'] = [worker.Worker("bbot-worker", "BUILDBOT_PASSWORD")]

c['protocols'] = {'pb': {'port': 9989}}

####### CHANGESOURCES                                                                                                                                                                                                                                                                                                  

c['change_source'] = []
c['change_source'].append(changes.PBChangeSource())

####### SCHEDULERS                                                                                                                                                                                                                                                                                                     

c['schedulers'] = []


c['schedulers'].append(schedulers.SingleBranchScheduler(
                            name="all",
                            change_filter=util.ChangeFilter(branch='master'),
                            treeStableTimer=None,
                            builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
                            name="force",
                            builderNames=["runtests"]))

####### BUILDERS                                                                                                                                                                                                                                                                                                       

factory = util.BuildFactory()
factory.addStep(steps.Gitea(repourl='[email protected]:myself/repo.git',
    mode='incremental',
        workdir="build",
        branch="master",
        progress=True,
        logEnviron=False,
))

factory.addStep(steps.ShellCommand(command=["make"]))

c['builders'] = []

c['builders'].append(
    util.BuilderConfig(name="runtests",
      workernames=["bbot-worker"],
      factory=factory))

####### BUILDBOT SERVICES                                                                                                                                                                                                                                                                                              

c['services'] = [
    reporters.GiteaStatusPush(
    baseURL="https://gitea.mydomain/",
        token="GITEA_API_ACCESS_TOKEN",
        verbose=True)
]


####### PROJECT IDENTITY                                                                                                                                                                                                                                                                                               

c['title'] = "My Domain!"
c['titleURL'] = "https://buildbot.mydomain"


c['buildbotURL'] = "https://buildbot.mydomain/"

c['www'] = dict(port=8010,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))

c['www']['authz'] = util.Authz(
        allowRules = [
            util.AnyEndpointMatcher(role="admins")
        ],
        roleMatchers = [
            util.RolesFromUsername(roles=['admins'], usernames=['myself'])
        ]
)

c['www']['auth'] = GiteaAuth(
    endpoint="https://gitea.mydomain/",
    client_id="MY_CLIENT_ID_FROM_GITEA",
    client_secret='MY_CLIENT_SECRET_FROM_GITEA')

c['www']['change_hook_dialects'] = {
                                  'gitea': {
                                  'secret': 'THE_GITEA_WEBHOOK_SECRET',
                                  'onlyIncludePushCommit': True
                                  }
}

####### DB URL                                                                                                                                                                                                                                                                                                         

c['db'] = {
    'db_url' : "postgresql://buildbot:[email protected]/buildbot",
}

主服务器的Dockerfile是

FROM alpine:3.11.3
EXPOSE 9989

RUN apk update
RUN apk add python3 bash    busybox-extras w3m gcc python3-dev libffi-dev openssl-dev musl-dev postgresql-dev
RUN mkdir /bbot
COPY entrypoint.sh /root/
RUN chmod a+x /root/entrypoint.sh
RUN mkdir /root/.ssh && chmod og-rwx /root/.ssh/
COPY bbot-gitea bbot-gitea.pub /root/.ssh/
RUN chmod og-w /root/.ssh/bbot-gitea*


RUN cd /bbot && \
    python3 -m venv sandbox && \
    source sandbox/bin/activate && \
    pip3 install 'buildbot[bundle]' && \
    pip3 install 'requests[security]' && \
    pip3 -v install buildbot_gitea && \
    pip3 install treq && \
    pip3 install psycopg2
RUN apk del gcc python3-dev libffi-dev openssl-dev musl-dev

RUN ls -la /root
RUN cat /root/entrypoint.sh

ENTRYPOINT [ "/root/entrypoint.sh" ]

入口点没有什么特别的,就是这个,

#!/bin/bash                                                                                                                                                                                                                                                                                                            

cd /bbot

echo " BBOT MASTER ENTRYPOINT"

source sandbox/bin/activate
buildbot upgrade-master bbot-master

# debug: check everything that was pip-installed:
echo "\n\n=====\n"
pip3 list
echo "=====\n\n"

if [ ! -f bbot-master/buildbot.tac ]; then
        buildbot create-master bbot-master
fi

buildbot start bbot-master
tail -f /bbot/bbot-master/twistd.log

pip3 list行,它在启动时运行以进行调试,显示我有

buildbot                2.7.0     
buildbot-console-view   2.7.0     
buildbot-gitea          1.2.0     
buildbot-grid-view      2.7.0     
buildbot-waterfall-view 2.7.0     
buildbot-worker         2.7.0     
buildbot-www            2.7.0     

edit:在Firefox中检查了JS控制台,似乎通过websockets连接到服务器时出现问题:

Firefox can’t establish a connection to the server at wss://buildbot.mydomain/ws.

从Chrome,这就是我看到的内容:

WebSocket connection to 'wss://buildbot.aleph0.info/ws' failed: Error during WebSocket handshake: Unexpected response code: 200

((200?为什么200?)

我不明白为什么它不起作用。 Apache配置为执行反向代理,如下所示:

RewriteEngine On
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule .* "wss:/localhost:8010/$1" [P,L]
ProxyPass        / http://localhost:8010/
ProxyPassReverse / http://localhost:8010/

所以...我还能做些什么来继续调试呢?

((顺便说一下,看起来好像buildbot邮件列表不是很活跃-在发布此问题之后,我检查了档案,活动很少。.Buildbot的用户最近去哪里去获取并分享建议?)

buildbot
1个回答
0
投票

我发现了问题!

这是未正确为Websocket配置的反向代理。

我在apache virtualhost配置中使用了它,

    <Location /ws>
              ProxyPass ws://127.0.0.1:8010/ws
              ProxyPassReverse ws://127.0.0.1:8010/ws
    </Location>

    ProxyPass /ws !
    ProxyPass        / http://localhost:8010/
    ProxyPassReverse / http://localhost:8010/

并且现在可以使用!

(经过大量搜索,我在这里找到了解决方案:https://docs.buildbot.net/0.9.2/manual/cfg-www.html

有,如果其他任何人需要它。

© www.soinside.com 2019 - 2024. All rights reserved.