jenkins - Jenkins 围绕管道共享库脚本触发包装器
问题描述
我们已共享可用于 Jenkins 存储库的全局脚本。
它们通过导入共享库并执行它来工作。
许多人可能使用同一个共享库。
Jenkinsfile(在我的仓库中)
@Library('shared-stuff) _
runSharedTests()
runSharedTests(在一个完全独立的仓库中)
def call() {
def agent = getAgent()
def setVariable = setAVariable()
pipline {
agent {
label agent
}
stages {
stage('Do Something') {
steps {
executeSomething()
}
}
}
}
}
是否可以向我的 Jenkinsfile 添加一个触发器来runSharedTests
定期触发管道?
我不能直接将触发器添加到runSharedTests
直接,因为那样数百个 repos 将获得该更改和触发器。
解决方案
在您的情况下,实现目标的最合适方法是定期让您的詹金斯工作。您的代码不需要更改。
配置→构建触发器→定期构建→计划:
为了允许定期调度的任务在系统上产生均匀的负载,应尽可能使用符号 H(代表“哈希”)。例如,使用
0 0 * * *
十几个日常工作会在午夜导致一个大的峰值。相比之下,usingH H * * *
仍然会每天执行一次每个作业,但不是同时执行一次,更好地使用有限的资源。H 符号可以与范围一起使用。例如,
H H(0-7) * * *
表示 12:00 AM(午夜)到 7:59 AM 之间的某个时间。您还可以使用带H
、带或不带范围的步长间隔。该
H
符号可以被认为是一个范围内的随机值,但它实际上是作业名称的散列,而不是随机函数,因此该值对于任何给定项目都保持稳定。请注意,对于月份字段,由于月份长度不同,短周期(例如
*/3
或H/3
不会在大多数月份结束时始终如一)工作。例如,*/3
将在长月的第 1、4、...31 天运行,然后在下个月的第二天再次运行。哈希值始终在 1-28 范围内选择,因此H/3
在月底运行之间会产生 3 到 6 天的间隔。(较长的周期也会有不一致的长度,但效果可能相对不太明显。)空行和以 开头的
#
行将作为注释被忽略。此外,还支持
@yearly
、@annually
、@monthly
、@weekly
、@daily
、@midnight
和@hourly
作为方便的别名。这些使用哈希系统进行自动平衡。例如,@hourly
与H * * * *
并且可能表示一小时内的任何时间相同。@midnight
实际上是指 12:00 AM 到 2:59 AM 之间的某个时间。例子:
# every fifteen minutes (perhaps at :07, :22, :37, :52) H/15 * * * * # every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24) H(0-29)/10 * * * * # once every two hours every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM) H 9-16/2 * * 1-5 # once a day on the 1st and 15th of every month except December H H 1,15 1-11 *
另一种方法是使用triggers指令。它定义了重新触发管道的自动化方式。例如:
pipeline {
agent any
triggers {
cron('H */4 * * 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
但请注意,这里使用了声明式样式。
推荐阅读
- javascript - 修改解构的反应状态将更新组件的状态
- c - 当 NULL 不是全零位时,全零位指针值是否也是“假”?
- xamarin - Visual Studio 卡在“为解决方案还原包”上
- python - Python Turtle Pong 游戏球和桨碰撞
- c# - 如果我不在 C# 中以调试模式运行测试,则进程未完全完成
- firebase - 如何根据 uid 创建用户配置文件并导航到配置文件页面?
- android-studio - 如何在真机上下载
- google-cloud-platform - 如何为存储桶中的文件更改创建电子邮件通知
- ios - 通用链接在 iOS 模拟器中不起作用
- django - 使用电子邮件而不是用户名来验证用户