尝试将通过 Caddy 提供的 Woodpecker CI 与 Gitea 配对时出现“意外的 EOF”错误

尝试将通过 Caddy 提供的 Woodpecker CI 与 Gitea 配对时出现“意外的 EOF”错误

你是我唯一的希望。我快要抓狂了。我试着做一件非常简单的事情,将Woodpecker CI实例与Gitea实例配对。

  1. 我在一个单独的主机上正在运行 Gitea。
  2. 我在 Gitea 的用户配置中为 Woodpecker 创建了一个 oauth2 应用程序。
  3. 我有一个Woodpecker CI为 Gitea 配置的实例,实际上可以通过 https 访问。它有效,有一个“登录”按钮。
  4. 我点击它。它将我重定向到 Gitea。我登录 Gitea 并在 Gitea 中授权 Woodpecker。
  5. 然后,我通过 Gitea 的应用程序配置中的重定向 URI 重定向回 Woodpecker,突然,我HTTP ERROR 502从 Woodpecker 实例中退出并且无法从那里继续。

有关设置的一些信息。我Woodpecker server在 LXD/LXC 容器中运行的二进制文件。它位于反向代理后面:Caddy。此503错误在 Caddy 的日志中留下痕迹:

Jun 19 23:01:37 woodpecker-server caddy[158]: {"level":"error","ts":1687208497.326067,"logger":"http.handlers.reverse_proxy","msg":"reading from backend","error":"unexpected EOF"}
Jun 19 23:01:37 woodpecker-server caddy[158]: {"level":"error","ts":1687208497.326134,"logger":"http.handlers.reverse_proxy","msg":"aborting with incomplete response","error":"unexpected EOF"}

啄木鸟的木头里什么也没有。

这是我的啄木鸟的配置:

WOODPECKER_HOST=[REDACTED]
WOODPECKER_ADMIN=[REDACTED]
WOODPECKER_LOG_LEVEL=warn
WOODPECKER_LETS_ENCRYPT=false

WOODPECKER_GITEA=true
WOODPECKER_GITEA_URL=[REDACTED]
WOODPECKER_GITEA_CLIENT=[REDACTED]
WOODPECKER_GITEA_SECRET=[REDACTED]
WOODPECKER_GITEA_SKIP_VERIFY=false

Caddyfile

[REDACTED] {
  reverse_proxy localhost:8000
}
# caddy version
v2.6.4 h1:2hwYqiRwk1tf3VruhMpLcYTg+11fCdr8S3jhNAdnPy8=

# woodpecker-server --version
woodpecker-server version 0.15.9

让我困惑的是,Woodpecker 服务器登录页面似乎可以正常工作。它将我重定向到我的 Gitea,允许我授权 Woodpecker,然后将我重定向回 Woodpecker 的https://[HOST]/authorize页面。因此,看起来所有数据都是正确的。但出于某种原因,在此步骤之后它无法提供正确的响应。

我确信 Gitea+Woodpecker 设置非常常见。有人知道这可能是什么原因造成的吗?该看什么?

更多信息:Gitea位于nginx后面,其配置为:

server {
    listen 80;
    listen 443 ssl;

    server_name [REDACTED];

    ssl_certificate /etc/letsencrypt/live/[REDACTED]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[REDACTED]/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;

    location / {
        client_max_body_size 512M;
        proxy_pass http://unix:/run/gitea/gitea.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

答案1

我猜问题是 WP 无法与 Gitea 通信,因此无法将代码交换为访问令牌。但我不太清楚为什么。也许你可以给下一个无论如何,尝试一下即将发布的版本。

答案2

看来啄木鸟里的虫子与https://github.com/woodpecker-ci/woodpecker/issues/1576。就像这个报告的问题一样,将 Gitea 的 URL 从域更改为 IP 似乎可以避免任何问题。还需要将WOODPECKER_GITEA_SKIP_VERIFY环境变量值设置为true。这是一种解决方法,但似乎有效。

相关内容