gitea和jenkins webhook

时间:2018-01-18 07:58:14

标签: jenkins jenkins-plugins jenkins-blueocean gitea

我正在测试Gitea,并希望它能触发Jenkins构建,非常基本的用例。我知道现有的GOG可以使用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获取新的源代码。
  3. 问题是gitea插件如何知道要执行什么工作?你怎么指定这个?现在我可以看到gitea正在上面的URL向Jenkins发送POST,但没有发生任何事情,Jenkins日志也没有任何信息可以理解它失败的原因。

    编辑:

    我遇到了一个问题,在将生成的公共SSH密钥复制到Gitea用户帐户后,Jenkins仍然无法访问repo以使用Pipeline Editor。不知道我在这里失踪了什么,因为我能够从localhost(在Docker环境之外)完美地推/拉,并且已经检查过容器确实可以完美地看到对方....

    由于

6 个答案:

答案 0 :(得分:8)

我已经设法使用相对较新的版本成功配置了Jenkins / Gitea组合(我使用官方的基于alpine的docker容器)。我使用this Gitea issue作为指南。我没有在Jenkins中使用Gogs插件,只使用了Gitea插件。我也不使用Pipeline,只使用经典的手动配置作业。

在Jenkins中:在作业设置页面上将“源代码管理”选项设置为“Git”,为您的仓库提供URL(http://gitea-url.your.org/username/repo.git),在“轮询触发器”部分中选中“轮询SCM”选项没有安排时间表。此设置基本上告诉Jenkins仅在通过webhook请求时轮询您的Gitea仓库。

在Gitea:回购 - >设置 - > 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 request body contains指向repo / branch的链接,而Jenkins在内部查找此内容以查找引用此repo的作业(您在上面的作业设置页面中定义的内容)。 This Jenkins wiki page更多地讲述了通用挂钩,还有this answer还有更多的链接可以解释一下发生了什么。

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

答案 1 :(得分:1)

当我最初在Jenkins中安装 Gitea插件并尝试在Gitea中配置webhook来触发Jenkins Pipeline项目(全部在本地完成)时,就像上面提到的@PhilW(假设你是在http://localhost:8080处运行Jenkins,从Gitea触发http://localhost:8080/gitea-webhook/?job=job_name对我来说也不起作用。

话虽如此,我然后在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,因此我怀疑(只是预感)此插件可能有一两个错误。

答案 2 :(得分:1)

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

从Gitea UI(存储库 - >设置 - > webhooks)我可以手动定义指示网址的webhook:https://my-jenkins/gitea-webhook/post

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

enter image description here

Jenkins方面我为Gitea配置了凭据。 当Jenkins找到一个带Jenkins文件的项目(我使用管道)时,它会自动配置存储库(Gitea方面)的webhook(如果不存在)。

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

Jenkins必须能够访问GIT存储库,因此您需要为他创建Git凭证。

答案 3 :(得分:0)

您可以使用Generic Webhook Trigger Plugin

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我在 Jenkins 配置中的 Gitea URL 是

http://192.168.1.105:3000 

而 Jenkins 只是忽略了所有的 webhook 触发器。

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

http://localhost:3000

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