gitea 和詹金斯 webhook
gitea and jenkins webhook
我正在测试 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
我认为应该发生的顺序如下:
- Gitea 看到推送 activity 并且 POST 将信息发送到 Jenkins webhook
- Jenkins Gitea webhook 看到 POST 并使用该信息从 Gitea 获取新的源代码。
问题是gitea插件是怎么知道要执行什么作业的?你如何指定这个?现在我可以看到 gitea 在上面 URL 向 Jenkins 发送 POST 但什么也没有发生,Jenkins 日志也没有信息来理解它失败的原因。
编辑:
我 运行 遇到一个问题,在将生成的 public SSH 密钥复制到 Gitea 用户帐户后,Jenkins 仍然无法访问存储库以使用管道编辑器。不确定我在这里遗漏了什么,因为我能够从本地主机(在 Docker 环境之外)完美 push/pull 并检查容器确实也可以完美地相互看到....
谢谢
当我最初在 Jenkins 中安装 Gitea 插件 并尝试在 Gitea 中配置一个 webhook 以触发一个 Jenkins Pipeline 项目(全部在本地完成)时,然后正如@PhilW 上面提到的(并假设你是 运行 Jenkins 在 http://localhost:8080
),从 Gitea 触发 http://localhost:8080/gitea-webhook/?job=job_name
对我也不起作用。
话虽如此,然后我在 Jenkins 中安装了 Gogs 插件,在 Gitea http://localhost:8080/gogs-webhook/?job=job_name
中重新配置了我的 webhook(注意区别),Jenkins 构建了我的 Pipeline 项目而没有一个障碍。
另外值得一提的是,作为一个简单的卑鄙把戏,我发现如果您使用适当的 webhook 附件指定 Jenkins 服务器的基础 URL(在您的网络浏览器中)——例如
http://localhost:8080/gogs-webhook/
(在 Jenkins 中安装并启用了 Gogs 插件),或者
http://localhost:8080/bitbucket-hook/
(安装并启用了 Bitbucket 插件),
你得到的只是一个空白页面,这似乎表明 Jenkins 中的相关 webhook 很可能按预期运行。
指定 http://localhost:8080/gitea-webhook/
(安装并启用了 Gitea 插件)returns 我遇到 HTTP 错误 404,所以我怀疑(只是直觉)这个插件可能有一两个错误。
我在 Jenkins 上使用 Gitea Plugin 1.0.4,我对 webhooks 没有任何问题。
我没有安装 Gog 插件。
来自 Gitea UI(存储库 -> 设置 -> webhooks)我可以手动定义我的 webhook 指示 URL:https://my-jenkins/gitea-webhook/post
这个可以手动测试,运行一个"Test delivery",如图:
Jenkins 方面我已经为 Gitea 配置了凭据。
当 Jenkins 找到带有 Jenkinsfile 的项目(我使用管道)时,它会自动为存储库(Gitea 端)配置 webhook(如果不存在)。
Gitea 将通过 POST 通知 Jenkins,其中包含大量 JSON 格式的信息。
Jenkins 必须有权访问 GIT 存储库,因此您需要为他创建 Git 的凭据。
您可以使用 Generic Webhook Trigger Plugin.
使用 token-feature 并为每个作业设置不同的令牌。
我已经使用相对较新的版本成功地配置了一个 Jenkins/Gitea 组合(我都使用官方的基于 alpine 的 docker 容器)。我使用 this Gitea issue 作为指南。我没有在Jenkins中使用Gogs插件,只使用了Gitea插件。我也不使用 Pipeline,只使用经典的手动配置作业。
在 Jenkins 中:在作业设置页面上将 "Source Code Management" 选项设置为 "Git",向您的存储库 (http://gitea-url.your.org/username/repo.git) 提供 URL,并在 "Poll triggers" 部分检查 "Poll SCM" 选项,未定义计划。此设置基本上告诉 Jenkins 仅在通过 webhook 请求时才轮询您的 Gitea 存储库。
在 Gitea 中:在 repo -> Settings -> Webhooks 下,添加新的 webhook,将 URL 设置为 http://jenkins_url.your.org/gitea-webhook/post,并清除密码(留空)。
此时点击 "Test Delivery" 按钮应该会产生成功的投递尝试(绿色复选标记)。
如果您的测试交付失败,请尝试查看是否可以 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 "{}"
正确的响应应该只是简单的 "Processed" 字符串。如果你有别的东西,post 在这里。
关于您关于 Jenkins 如何知道要构建什么工作 的问题,我的理解是 POST request body contains a link to the repo/branch, and Jenkins looks this up internally to find the job that references this repo (the stuff you defined in the job settings page above). This Jenkins wiki page tells a bit more about generic hooks, and there's also this answer 带有进一步的链接,可能会稍微解释下面发生的事情引擎盖。
要稍微调试一下,您可以使用来自 gitea 存储库(或组织)的 "recent deliveries"(可点击整个 post 请求和响应!) ) 设置为 。请记住,gitea 有其 /etc/gitea/app.ini 文件,其中指定了 ssh 域、gitea 服务器域和 http url,并且您在 jenkins 中指定了 gitea srvers。这些 url 必须匹配才能正常工作!
在尝试了许多不同的指南让 webhooks 与 Gitea 插件一起工作后,我发现如果 json 请求中的 Gitea 主机名与 Jenkins 知道的不匹配,它不会触发。
我 运行 Jenkins 和 Gitea 在单独的 Docker 容器中连接到同一个桥接网络,并想让它们使用内部主机名进行通信。如果有人有类似的设置,尝试在 Jenkins/Gitea 中输入 public url。 (在 Jenkins 中还有一个选项,您可以在其中输入 Gitea 的别名 url,但这对我不起作用。)
这不是我想要的,但这样效果很好。
我在 Jenkins 配置中的 Gitea URL 是
http://192.168.1.105:3000
Jenkins 忽略了所有 webhook 触发器。
在 Jenkins/configure/gitea/advanced 中为 Gitea 添加“别名 URL”后,它起作用了:
http://localhost:3000
给我指出了正确的方向。我在同一台机器上的单独 docker 容器中对 Jenkins 和 Gitea 进行了类似的设置。
我正在测试 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
我认为应该发生的顺序如下:
- Gitea 看到推送 activity 并且 POST 将信息发送到 Jenkins webhook
- Jenkins Gitea webhook 看到 POST 并使用该信息从 Gitea 获取新的源代码。
问题是gitea插件是怎么知道要执行什么作业的?你如何指定这个?现在我可以看到 gitea 在上面 URL 向 Jenkins 发送 POST 但什么也没有发生,Jenkins 日志也没有信息来理解它失败的原因。
编辑:
我 运行 遇到一个问题,在将生成的 public SSH 密钥复制到 Gitea 用户帐户后,Jenkins 仍然无法访问存储库以使用管道编辑器。不确定我在这里遗漏了什么,因为我能够从本地主机(在 Docker 环境之外)完美 push/pull 并检查容器确实也可以完美地相互看到....
谢谢
当我最初在 Jenkins 中安装 Gitea 插件 并尝试在 Gitea 中配置一个 webhook 以触发一个 Jenkins Pipeline 项目(全部在本地完成)时,然后正如@PhilW 上面提到的(并假设你是 运行 Jenkins 在 http://localhost:8080
),从 Gitea 触发 http://localhost:8080/gitea-webhook/?job=job_name
对我也不起作用。
话虽如此,然后我在 Jenkins 中安装了 Gogs 插件,在 Gitea http://localhost:8080/gogs-webhook/?job=job_name
中重新配置了我的 webhook(注意区别),Jenkins 构建了我的 Pipeline 项目而没有一个障碍。
另外值得一提的是,作为一个简单的卑鄙把戏,我发现如果您使用适当的 webhook 附件指定 Jenkins 服务器的基础 URL(在您的网络浏览器中)——例如
http://localhost:8080/gogs-webhook/
(在 Jenkins 中安装并启用了 Gogs 插件),或者http://localhost:8080/bitbucket-hook/
(安装并启用了 Bitbucket 插件),
你得到的只是一个空白页面,这似乎表明 Jenkins 中的相关 webhook 很可能按预期运行。
指定 http://localhost:8080/gitea-webhook/
(安装并启用了 Gitea 插件)returns 我遇到 HTTP 错误 404,所以我怀疑(只是直觉)这个插件可能有一两个错误。
我在 Jenkins 上使用 Gitea Plugin 1.0.4,我对 webhooks 没有任何问题。 我没有安装 Gog 插件。
来自 Gitea UI(存储库 -> 设置 -> webhooks)我可以手动定义我的 webhook 指示 URL:https://my-jenkins/gitea-webhook/post
这个可以手动测试,运行一个"Test delivery",如图:
Jenkins 方面我已经为 Gitea 配置了凭据。 当 Jenkins 找到带有 Jenkinsfile 的项目(我使用管道)时,它会自动为存储库(Gitea 端)配置 webhook(如果不存在)。
Gitea 将通过 POST 通知 Jenkins,其中包含大量 JSON 格式的信息。
Jenkins 必须有权访问 GIT 存储库,因此您需要为他创建 Git 的凭据。
您可以使用 Generic Webhook Trigger Plugin.
使用 token-feature 并为每个作业设置不同的令牌。
我已经使用相对较新的版本成功地配置了一个 Jenkins/Gitea 组合(我都使用官方的基于 alpine 的 docker 容器)。我使用 this Gitea issue 作为指南。我没有在Jenkins中使用Gogs插件,只使用了Gitea插件。我也不使用 Pipeline,只使用经典的手动配置作业。
在 Jenkins 中:在作业设置页面上将 "Source Code Management" 选项设置为 "Git",向您的存储库 (http://gitea-url.your.org/username/repo.git) 提供 URL,并在 "Poll triggers" 部分检查 "Poll SCM" 选项,未定义计划。此设置基本上告诉 Jenkins 仅在通过 webhook 请求时才轮询您的 Gitea 存储库。
在 Gitea 中:在 repo -> Settings -> Webhooks 下,添加新的 webhook,将 URL 设置为 http://jenkins_url.your.org/gitea-webhook/post,并清除密码(留空)。
此时点击 "Test Delivery" 按钮应该会产生成功的投递尝试(绿色复选标记)。
如果您的测试交付失败,请尝试查看是否可以 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 "{}"
正确的响应应该只是简单的 "Processed" 字符串。如果你有别的东西,post 在这里。
关于您关于 Jenkins 如何知道要构建什么工作 的问题,我的理解是 POST request body contains a link to the repo/branch, and Jenkins looks this up internally to find the job that references this repo (the stuff you defined in the job settings page above). This Jenkins wiki page tells a bit more about generic hooks, and there's also this answer 带有进一步的链接,可能会稍微解释下面发生的事情引擎盖。
要稍微调试一下,您可以使用来自 gitea 存储库(或组织)的 "recent deliveries"(可点击整个 post 请求和响应!) ) 设置为
在尝试了许多不同的指南让 webhooks 与 Gitea 插件一起工作后,我发现如果 json 请求中的 Gitea 主机名与 Jenkins 知道的不匹配,它不会触发。
我 运行 Jenkins 和 Gitea 在单独的 Docker 容器中连接到同一个桥接网络,并想让它们使用内部主机名进行通信。如果有人有类似的设置,尝试在 Jenkins/Gitea 中输入 public url。 (在 Jenkins 中还有一个选项,您可以在其中输入 Gitea 的别名 url,但这对我不起作用。)
这不是我想要的,但这样效果很好。
我在 Jenkins 配置中的 Gitea URL 是
http://192.168.1.105:3000
Jenkins 忽略了所有 webhook 触发器。
在 Jenkins/configure/gitea/advanced 中为 Gitea 添加“别名 URL”后,它起作用了:
http://localhost:3000