我试图在docker镜像构建上构建一个jenkins作业(远程触发构建),在docker hub上构建的所有内容如下:
HISTORY ID Status Date & Time 7345... ! ERROR 10/12/17 10:03
字符串原因(假设):Docker未通过身份验证以发布到Jenkins URL。问:当镜像被推送到docker hub时,如何自动触发作业?
qzwqbdag1#
uxh89sit2#
您可以尝试以下插件:https://wiki.jenkins.io/display/JENKINS/CloudBees+Docker+Hub+Notification它声称能达到你想要的效果。
muk1a3rh3#
您可以在DockerHub中配置WebHook,它将触发Jenkins-Build。
0s7z1bwu4#
针对Jenkings服务器端点的Docker Hub webhooks需要定期将镜像复制到您拥有的另一个repo中[请参阅我的另一个答案:Docker Hub -> Watchman -> Jenkins integration through Slack notifications]。
你需要设置一个cron作业,定期轮询(docker pull)源代码仓库,[docker]拉取它的'latest'标签,如果检测到更改,将其重新标记为你自己的,[docker]推送到你自己的仓库(例如,docker)。Docker Hub repo源代码的“克隆”),其中您已经设置了一个针对Jenkings构建端点的webhook。然后,也只有这样(在您拥有的repo中),Jenkins插件(如Docker Hub Notification Trigger)才能为您工作。
docker pull
作为轮询注册表以获取镜像更改的替代方法(由于docker镜像的本地缓存,这不需要产生太多的网络流量),您还可以使用wget在Github上轮询源Dockerfile。例如,官方Docker Hub镜像的Dockerfile是here。如果Github repo发布了版本,你可以使用Github Watch > Releases Only功能获得推送通知,如果他们有CI docker版本。Docker镜像通常在代码发布后延迟可用,即使是完全自动化,因此镜像轮询更可靠。
wget
还有一个名为Polling Docker Registries for Image Changes的2019年Google Summer of Code项目的提案,试图为Jenkins用户解决这个问题。显然是谷歌),但遗憾的是,它没有被与会者采纳。
zed5wv105#
1.运行一个cron任务,周期性地执行docker search,列出docker镜像(here's the script)中的所有标签。请注意,此脚本需要将jannis/jq图像替换为现有图像(例如docker run --rm -i imega/jq)。1.将生成的标签列表保存到文件中,并监视其更改(例如inotifywait)。1.使用curl向使用Generic Webhook Trigger插件的Jenkins服务器的端点发出POST请求。注意事项:1.出于效率的原因,该标签列表脚本应当被限制为几个(例如,3个)首页或具有几个标签的简单存储库,1.图像标签监视依赖于在每次图像改变之后正确地(自动地)更新标签,而不是像Ubuntu标签(例如,trusty-20190515在几天前更新-11月下旬,没有在其5月中旬标签的变化)。
cron
docker search
jannis/jq
docker run --rm -i imega/jq
curl
trusty-20190515
k3fezbri6#
转到Jenkins并点击右上角的个人资料。选择“配置”以访问Jenkins配置。如果尚未安装必要的插件,请通过安装该插件来创建API令牌。保存您生成的API令牌(例如,5599665 asc 58866544 dsc 64121)。现在,让我们在您的管道中配置构建触发器部分:转到管道配置。选中“Trigger builds remotely(e.g.,from scripts)”复选框。输入随机数(例如123456789)并保存配置。接下来,让我们在Docker Hub中创建一个webhook:转到Docker Hub的webhook部分。创建新的webhook。输入以下URL格式:http://jenkinsusername:5599665asc58866544dsc64121@jenkinsurl/job/job-name/build?token=123456789下面是一个示例URL:http://admin:5599665asc58866544dsc64121@192.168.596.53:8080/job/front-demo/build?token=123456789
6条答案
按热度按时间qzwqbdag1#
1.在您的Jenkins服务器中安装Build Token Root Plugin,并将其设置为 * 接收 * Slack格式的通知,该通知使用令牌进行保护,以触发远程构建或更安全的本地构建(这些触发器将来自Watchtower容器,而不是Slack)。Here's how的函数。
1.设置Watchtower,以便在您想要的图像(标签)中的每次更改时将Slack消息发布到您的Jenkins端点。Here's how。
1.可选地,如果你的规模太大,以至于你可能会超载并通过大量HTTP GET请求(如果时间触发器出错并变成一个紧密的循环)来使整个Docker Hub崩溃,请确保在Watchtower上构建一些安全检查以“监视守望者”。
uxh89sit2#
您可以尝试以下插件:https://wiki.jenkins.io/display/JENKINS/CloudBees+Docker+Hub+Notification
它声称能达到你想要的效果。
muk1a3rh3#
您可以在DockerHub中配置WebHook,它将触发Jenkins-Build。
0s7z1bwu4#
针对Jenkings服务器端点的Docker Hub webhooks需要定期将镜像复制到您拥有的另一个repo中[请参阅我的另一个答案:Docker Hub -> Watchman -> Jenkins integration through Slack notifications]。
查看详情
你需要设置一个cron作业,定期轮询(
docker pull
)源代码仓库,[docker]拉取它的'latest'标签,如果检测到更改,将其重新标记为你自己的,[docker]推送到你自己的仓库(例如,docker)。Docker Hub repo源代码的“克隆”),其中您已经设置了一个针对Jenkings构建端点的webhook。然后,也只有这样(在您拥有的repo中),Jenkins插件(如Docker Hub Notification Trigger)才能为您工作。
轮询Dockerfile / release变更
作为轮询注册表以获取镜像更改的替代方法(由于docker镜像的本地缓存,这不需要产生太多的网络流量),您还可以使用
wget
在Github上轮询源Dockerfile。例如,官方Docker Hub镜像的Dockerfile是here。如果Github repo发布了版本,你可以使用Github Watch > Releases Only功能获得推送通知,如果他们有CI docker版本。Docker镜像通常在代码发布后延迟可用,即使是完全自动化,因此镜像轮询更可靠。其他项目
还有一个名为Polling Docker Registries for Image Changes的2019年Google Summer of Code项目的提案,试图为Jenkins用户解决这个问题。显然是谷歌),但遗憾的是,它没有被与会者采纳。
zed5wv105#
1.运行一个
cron
任务,周期性地执行docker search
,列出docker镜像(here's the script)中的所有标签。请注意,此脚本需要将jannis/jq
图像替换为现有图像(例如docker run --rm -i imega/jq
)。1.将生成的标签列表保存到文件中,并监视其更改(例如inotifywait)。
1.使用
curl
向使用Generic Webhook Trigger插件的Jenkins服务器的端点发出POST请求。注意事项:
1.出于效率的原因,该标签列表脚本应当被限制为几个(例如,3个)首页或具有几个标签的简单存储库,
1.图像标签监视依赖于在每次图像改变之后正确地(自动地)更新标签,而不是像Ubuntu标签(例如,
trusty-20190515
在几天前更新-11月下旬,没有在其5月中旬标签的变化)。k3fezbri6#
转到Jenkins并点击右上角的个人资料。选择“配置”以访问Jenkins配置。如果尚未安装必要的插件,请通过安装该插件来创建API令牌。保存您生成的API令牌(例如,5599665 asc 58866544 dsc 64121)。现在,让我们在您的管道中配置构建触发器部分:
转到管道配置。选中“Trigger builds remotely(e.g.,from scripts)”复选框。输入随机数(例如123456789)并保存配置。接下来,让我们在Docker Hub中创建一个webhook:
转到Docker Hub的webhook部分。创建新的webhook。
输入以下URL格式:http://jenkinsusername:5599665asc58866544dsc64121@jenkinsurl/job/job-name/build?token=123456789
下面是一个示例URL:http://admin:5599665asc58866544dsc64121@192.168.596.53:8080/job/front-demo/build?token=123456789