Jenkins触发管道共享库脚本周围的包装器

时间:2019-01-09 19:23:31

标签: jenkins jenkins-pipeline

我们共享了可用于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,因为成百上千的回购协议将获得更改并触发。

1 个答案:

答案 0 :(得分:0)

对于您而言,实现目标的最合适方法是定期执行詹金斯工作。您的代码无需更改。

配置→构建触发器→定期构建→计划:

  

为使定期计划的任务在系统上产生均匀的负载,应尽可能使用符号H(“哈希”)。例如,将0 0 * * *用于一打日常工作将导致午夜时分大幅增加。相比之下,使用H H * * *仍会每天执行一次每个作业,但不是同时执行一次,最好使用有限的资源。

     

H符号可以与范围一起使用。例如,H H(0-7) * * *表示从12:00 AM(午夜)到7:59 AM之间的某个时间。您还可以将步距间隔与H配合使用,可以使用范围,也可以不使用范围。

     

可以将H符号视为一个范围内的随机值,但实际上它是作业名称的哈希,而不是随机函数,因此该值对于任何给定项目均保持稳定。 / p>      

请注意,由于月份长度的变化,在月的日字段中,诸如*/3H/3之类的短周期在大多数月份临近时将无法连续工作。例如,*/3将在一个月的第一天,第四天,…31天运行,然后在下个月的第二天再次运行。哈希值始终选择在1-28范围内,因此H/3在月底运行3到6天之间会产生间隔。 (较长的周期也将具有不一致的长度,但效果可能相对不太明显。)

     

空行和以#开头的行将被视为注释。

     

此外,还支持@yearly@annually@monthly@weekly@daily@midnight@hourly作为方便的别名。这些使用哈希系统进行自动平衡。例如,@hourlyH * * * *相同,并且可能表示小时中的任何时间。 @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'
            }
        }
    }
}

但是请注意,这里使用了声明式样式。