6

我正在测试 Gitea,并希望它触发 Jenkins 构建,非常基本的用例。我知道有现有的 GOGs webhook 插件可以使用,但最近还发现 Jenkins 也有一个 Gitea 插件。

在 GOGS 案例中,您可以通过以下方式调用 Jenkins: http://localhost:8080/gogs-webhook/?job=job_name

在上面的示例中,显然根据需要更新了 Jenkins 位置和作业名称。

问题是 Gitea 插件没有文档,但根据源代码,URL 应该是:

http://jenkins-url/gitea-webhook/post

我认为应该发生的顺序如下:

  1. Gitea 看到推送活动并将信息发布到 Jenkins webhook
  2. Jenkins Gitea webhook 看到 POST 并使用该信息从 Gitea 获取新的源代码。

问题是 gitea 插件如何知道要执行什么作业?你如何指定这个?现在我可以看到 gitea 正在通过上述 URL 向 Jenkins 发送 POST 但没有发生任何事情,Jenkins 日志也没有任何信息来理解它失败的原因。

编辑:

我在这里遇到了一个问题,在将生成的公共 SSH 密钥复制到 Gitea 用户帐户后,Jenkins 仍然无法访问存储库以使用管道编辑器。不确定我在这里缺少什么,因为我能够从 localhost(Docker 环境之外)完美地推/拉,并检查了容器确实也可以完美地看到彼此......

谢谢

4

6 回答 6

12

我已经成功地使用相对较新的版本配置了 Jenkins/Gitea 组合(我对两者都使用了官方的基于 alpine 的 docker 容器)。我使用这个 Gitea 问题作为指导。我没有在 Jenkins 中使用 Gogs 插件,只使用了 Gitea 插件。我也不使用 Pipeline,只使用经典的手动配置作业。

在 Jenkins 中:在作业设置页面上将“源代码管理”选项设置为“Git”,提供指向您的仓库的 URL(http://gitea-url.your.org/username/repo.git),并在“投票触发器”中" 部分检查未定义计划的“轮询 SCM”选项。此设置基本上告诉 Jenkins 仅在通过 webhook 请求时轮询您的 Gitea 存储库。

在 Gitea 中:在 repo -> Settings -> Webhooks 下,添加新的 webhook,将 URL 设置为http://jenkins_url.your.org/gitea-webhook/post,并清除密码(留空)。

此时单击“测试交付”按钮应该会产生成功的交付尝试(绿色复选标记)。

如果您的测试交付失败,请尝试查看是否可以 POST 到 Jenkins webhook URL ( http://jenkins_url.your.org/gitea-webhook/post )。例如使用Postman或 curl:

curl -vvv -H "Content-Type: application/json" -H "X-Gitea-Event: push" -X POST http://jenkins.server.example.sk:8080/gitea-webhook/post -d "{}"

正确的响应应该只是简单的“已处理”字符串。如果你有别的东西,把它贴在这里。

至于您关于Jenkins 如何知道要构建什么工作的问题,我的理解是POST 请求正文包含指向 repo/分支的链接,Jenkins 在内部查找它以找到引用此 repo 的工作(您在上面的作业设置页面)。这个 Jenkins wiki 页面讲述了更多关于通用钩子的信息,还有这个答案以及进一步的链接,可以解释一些幕后发生的事情。

要稍微调试一下,您可以使用 gitea 存储库(或组织)设置中的“最近交付”(可单击整个帖子请求和响应!),如this answer所示。请记住,gitea 有它的 /etc/gitea/app.ini 文件,其中指定了 ssh 域、gitea 服务器域和 http url,并且您在 jenkins 中指定了 gitea srvers。这些网址必须匹配才能正常工作!

于 2018-05-08T10:16:12.290 回答
3

当我最初在 Jenkins 中安装Gitea 插件并尝试在 Gitea 中配置 webhook 以触发 Jenkins Pipeline 项目(全部在本地完成)时,然后正如上面提到的 @PhilW (并假设您正在运行 Jenkins http://localhost:8080),http://localhost:8080/gitea-webhook/?job=job_name从 Gitea 触发没有'也不适合我。

话虽如此,然后我在 Jenkins 中安装了Gogs 插件,在 Gitea中重新配置了我的 webhook http://localhost:8080/gogs-webhook/?job=job_name(注意差异),然后 Jenkins 顺利地构建了我的 Pipeline 项目。

另外值得一提的是,作为一个简单的肮脏技巧,我发现如果您使用适当的 webhook 附件指定 Jenkins 服务器的基本 URL(在您的 Web 浏览器中) - 例如

  • http://localhost:8080/gogs-webhook/(在 Jenkins 中安装并启用Gogs 插件),或
  • http://localhost:8080/bitbucket-hook/(安装并启用Bitbucket 插件),

你得到的只是一个空白页面,这似乎表明 Jenkins 中的相关 webhook 很可能按预期运行。

指定http://localhost:8080/gitea-webhook/(安装并启用Gitea 插件)返回给我一个 HTTP 错误 404,所以我怀疑(只是预感)这个插件可能有一两个错误。

于 2018-02-07T03:38:46.520 回答
2

我在 Jenkins 上使用 Gitea Plugin 1.0.4,我对 webhook 没有任何问题。我没有安装 Gog 插件。

从 Gitea UI (repository -> settings -> webhooks) 我可以手动定义我的 webhook 指示 URL:https://my-jenkins/gitea-webhook/post

这可以手动测试,运行“测试交付”,如下图所示:

在此处输入图像描述

Jenkins 方面我已经为 Gitea 配置了凭证。当 Jenkins 找到带有 Jenkinsfile 的项目(我使用管道)时,它会自动为存储库(Gitea 端)配置 webhook(如果不存在)。

Gitea 将通过包含大量 JSON 格式信息的 POST 通知 Jenkins。

Jenkins 必须有权访问 GIT 存储库,因此您需要为他创建 Git 凭据。

于 2018-02-27T18:09:40.430 回答
1

在尝试了许多不同的指南以使 webhook 与 Gitea 插件一起使用后,我发现如果 json 请求中的 Gitea 主机名与 Jenkins 知道的不匹配,它不会触发。
我在连接到同一个桥接网络的不同 Docker 容器中运行 Jenkins 和 Gitea,并希望使它们使用内部主机名进行通信。如果有人有类似的设置,请尝试在 Jenkins/Gitea 中输入公共 url。(Jenkins 中还有一个选项,您可以在其中输入 Gitea url 的别名,但这对我不起作用。)
这不完全是我想要的,但它可以正常工作。

于 2021-03-25T13:06:14.300 回答
1

您可以使用通用 Webhook 触发器插件

使用令牌功能并为每个作业使用不同的令牌。

于 2018-03-31T18:36:53.723 回答
0

我在 Jenkins 配置中的 Gitea URL 是

http://192.168.1.105:3000 

詹金斯只是忽略了所有的 webhook 触发器。

在 Jenkins/configure/gitea/advanced 中为 Gitea 添加“别名 URL”后,它起作用了:

http://localhost:3000

fugi的回答为我指明了正确的方向。我在同一台机器上的不同 docker 容器中使用 Jenkins 和 Gitea 进行了类似的设置。

于 2021-07-18T20:47:18.333 回答