Docker在推送镜像时触发jenkins作业

ryevplcw  于 2023-08-03  发布在  Jenkins
关注(0)|答案(6)|浏览(159)

我试图在docker镜像构建上构建一个jenkins作业(远程触发构建),在docker hub上构建的所有内容如下:

HISTORY
ID        Status      Date & Time
7345...   ! ERROR       10/12/17 10:03

字符串
原因(假设):Docker未通过身份验证以发布到Jenkins URL。
问:当镜像被推送到docker hub时,如何自动触发作业?

qzwqbdag

qzwqbdag1#

  1. Pull并运行 Watchtower docker image,以轮询Docker Hub或Quay上您需要的任何第三方公共Docker镜像(通常作为您自己的容器的基础镜像)。Here's how.这里的“轮询”并不意味着每隔5分钟左右就粗略地拉取整个映像-我们定期监视映像中的更改,大多数时间只下载校验和(SHA摘要)(当本地缓存的映像中没有更改时)。
    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上构建一些安全检查以“监视守望者”。
uxh89sit

uxh89sit2#

您可以尝试以下插件:https://wiki.jenkins.io/display/JENKINS/CloudBees+Docker+Hub+Notification
它声称能达到你想要的效果。

muk1a3rh

muk1a3rh3#

您可以在DockerHub中配置WebHook,它将触发Jenkins-Build。

0s7z1bwu

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用户解决这个问题。显然是谷歌),但遗憾的是,它没有被与会者采纳。

zed5wv10

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月中旬标签的变化)。

k3fezbri

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

相关问题