如何在 Jenkins 脚本管道中使用 dockerhub-notification-plugin?
How to use dockerhub-notification-plugin in Jenkins scripted pipeline?
我想在将新图像推送到 docker 集线器时触发管道。
我安装了 dockerhub-notification-plugin。
如果我使用网络 UI,则可以指定 docker 集线器存储库:
我尝试使用管道片段生成器,但它无法正常工作:如果我指定了一个存储库,它会在生成的代码中被忽略。
例如:
生成代码:
properties([pipelineTriggers([[$class: 'DockerHubTrigger', options: []]])])
如您所见,生成的代码中没有指定 docker 集线器存储库。
正确的做法是像下面这样写你的属性:
properties([
pipelineTriggers([[$class: 'DockerHubTrigger', options: [[$class: 'TriggerOnSpecifiedImageNames', repoNames: ["YOUR_REPO_NAME"].toSet()]]]])
])
首先请注意选项值周围的附加括号。这是由于 groovy 脚本在 jenkins 中的评估方式。
但为什么要设置?
根据 javadoc TriggerOnSpecifiedImageNames
class 具有三个构造函数:无参数、带可变参数的字符串和带集合。但是 groovy 将使用反射来实例化此 class,这意味着将调用默认构造函数,稍后将应用相应的属性。这将我们带到 toSet()
,因为正如您在 javadoc 中看到的那样,回购名称 属性 有一个 setter,如下所示:setRepoNames(Set<String> repoNames)
.
我想在将新图像推送到 docker 集线器时触发管道。 我安装了 dockerhub-notification-plugin。 如果我使用网络 UI,则可以指定 docker 集线器存储库:
我尝试使用管道片段生成器,但它无法正常工作:如果我指定了一个存储库,它会在生成的代码中被忽略。 例如:
生成代码:
properties([pipelineTriggers([[$class: 'DockerHubTrigger', options: []]])])
如您所见,生成的代码中没有指定 docker 集线器存储库。
正确的做法是像下面这样写你的属性:
properties([
pipelineTriggers([[$class: 'DockerHubTrigger', options: [[$class: 'TriggerOnSpecifiedImageNames', repoNames: ["YOUR_REPO_NAME"].toSet()]]]])
])
首先请注意选项值周围的附加括号。这是由于 groovy 脚本在 jenkins 中的评估方式。
但为什么要设置?
根据 javadoc TriggerOnSpecifiedImageNames
class 具有三个构造函数:无参数、带可变参数的字符串和带集合。但是 groovy 将使用反射来实例化此 class,这意味着将调用默认构造函数,稍后将应用相应的属性。这将我们带到 toSet()
,因为正如您在 javadoc 中看到的那样,回购名称 属性 有一个 setter,如下所示:setRepoNames(Set<String> repoNames)
.