连接GitHub到运行在Docker Toolbox上的Jenkins

83次阅读
没有评论

问题描述

在学习DevOps的过程中,使用Docker Toolbox容器中的Jenkins。他可以通过192.168.99.100:8080访问Jenkins。他配置了一个作业,并成功使用”Build Now”从GitHub仓库获取文件(该仓库是公开的)。他希望在GitHub提交后自动构建作业,但无法实现。他在GitHub设置中配置了一个Webhook,但在提交后,”Webhooks”页面显示错误”Last delivery was not successful. Couldn’t connect to server.”。他在Webhook的URL中配置了”http://192.168.99.100:8080/jenkins-name/”,他不确定这个URL是否正确。在Jenkins中,他使用了GitHub插件,并在”Configure System”中配置了GitHub服务器和凭据,并通过”Test connection”按钮进行了验证。在作业中,他在”Source Code Management”部分配置了GitHub仓库,并在”Build Triggers”部分勾选了”GitHub hook trigger for GITScm polling”。他读到了与端口转发有关的内容。他希望得到帮助。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你的配置是错误的。你在Webhook中添加的URL是本地Jenkins的URL,而GitHub无法连接到本地URL。你还提供了错误的Webhook-URL。
请在Webhook中添加你的Jenkins的公共IP,例如:http://35.24.128.75:8080/,GitHub的Webhook payload URL应该是http://35.24.128.75:8080/github-webhook
请观看以下视频以获取完整的Webhook配置:https://www.youtube.com/watch?v=wsnq9uGAWkM&t=460s

方案2

你正在正确的轨道上,需要进行端口转发-你需要告诉你的路由器将流量从你的公共IP地址转发到你的Jenkins服务器的特定端口。
192.168.x.x地址是私有地址范围之一-外部网络上的任何人都无法看到这些地址上的任何服务器。如果你感兴趣,可以参考https://en.wikipedia.org/wiki/Private_network了解有关私有地址的更多信息。
你可能有一个用于连接到ISP的调制解调器/路由器。它将所有来自192.168.x.x地址的流量转换为可以在互联网上使用的流量。当来自互联网的响应返回到你的计算机时,路由器会识别它是一个响应,并将其发送到发起请求的计算机。
但是,如果来自外部世界的请求不是响应,路由器就不知道该将其发送到哪里-它只是丢弃它。这就是端口转发的作用。你可以告诉你的路由器,如果它看到一个请求进入8080端口,那么它应该将请求发送到192.168.x.x地址和端口xxxx的服务器。
请注意,入站端口和服务器端口不必相同。这可以通过安全性通过混淆提供一定程度的安全性-因为大多数开发人员倾向于在8080端口上运行服务器,一些黑客脚本会尝试该端口。你可能希望在路由器上使用一些随机端口号,将其转发到内部的8080端口。(这仍然不是良好的安全性,但比没有好。)
编辑:我忘记了一个重要的事情:你需要告诉GitHub访问你的公共IP地址,以使端口转发起作用。你可以通过访问https://www.google.com/search?q=whats+my+ip来找到你的公共IP地址。如果你24×7连接到ISP,那么你的公共IP可能不会经常更改(如果有的话),这可能适用于你。如果你的IP经常更改(或者你只是想进一步提升),你可以考虑使用公共动态DNS(需要本地客户端)来为你提供一个始终指向你的IP地址的DNS名称(例如noip.com-我十多年没有使用过它们,所以我不知道它们是否好用,但至少它会给你一个开始查看这个的起点)。

方案3

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案4

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案5

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案6

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案7

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案8

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案9

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案10

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案11

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案12

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案13

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案14

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

方案15

使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。
另一种方法是使用程序(如ngrok)或工具来控制端口转发。你可以使用docker run命令手动控制端口转发,或者使用一些第三方工具来管理端口转发。
以下是一个简单的bash脚本示例,可以在Jenkins启动后启动端口转发:

#!/bin/bash
# 启动Jenkins
docker run -d --name jenkins your_image_jenkins
# 等待Jenkins完全启动
while ! docker exec jenkins echo "Jenkins is ready"; do
  sleep 1
done
# 启动端口转发
ngrok http 8080

在这个示例中,我们首先使用docker run命令启动Jenkins,并将其命名为jenkins。然后,使用一个循环来等待Jenkins完全启动(这里是通过在Jenkins内运行echo命令来测试)。一旦Jenkins就绪,我们再使用ngrok命令启动端口转发,将本地的8080端口映射到公共IP地址上。
请注意,使用ngrok等程序进行端口转发可能会增加复杂性,并且需要确保端口转发设置正确。

正文完