Jenkins在不链接工作的情况下使用管道

时间:2019-04-25 07:21:13

标签: jenkins-pipeline

我想从头到尾得到一份连锁工作。但是这些作业也需要单独执行。

我想要一个计划的构建,并且需要将那些工作链接在一起。

手动运行时,不要以级联模式运行作业。

我不想单击“配置”,删除下游运行并在手动执行的情况下重新添加下游。

什么是最佳解决方案?

谢谢。

1 个答案:

答案 0 :(得分:1)

所以可以做到这一点,但是我建议将下面列出的功能放在Jenkins共享库中。以此方式进行操作将至少获得4个沙箱安全性批准,这将需要您的jenkins管理员批准。其中1条警告说这是一个安全漏洞。...因此,请评估对环境和风险状况的影响。

#!groovy

List jobparameters = [
        booleanParam(name: 'CHECKBOX', defaultValue: true, description: 'Tick a checkbox'),
        string(name: 'STRING', defaultValue: 'stringhere', description: 'Enter a string')
    ]

properties([
    pipelineTriggers([cron('''TZ=Australia/Victoria
            H 1 * * *''')]),
    buildDiscarder(logRotator(numToKeepStr: '20')),
    parameters(jobparameters),
])


stage('Stage') {
    node {
        // do something always
        echo(params.STRING)
    }
}
if ( hasAutomatedCauses() ) {
    stage('folder1/reponame/branch') {
        //do something conditionally
        build(job: "folder1/reponame/branch", parameters: jobparameters, propagate: true)
    }
} else {
    stage('folder1/reponame/branch') {
        node {
            echo("Not running downstream job")
        }
    }
}

/**
 * Checks if job causes contain automated causes
 * Return true if automated cause found
 *
 * @return boolean
 */
boolean hasAutomatedCauses() {

    List automatedCauses = ['UpstreamCause', 'TimerTriggerCause']

    List intersection = []
    intersection = automatedCauses.intersect(getCauses())

    // if no automated causes are found means intersection is empty and then return false
    return !intersection.isEmpty()
}

/**
 * Retrieves list of causes that generated job execution
 *
 * @return list
 */
List getCauses() {

    return currentBuild.rawBuild.getCauses().collect { it.getClass().getCanonicalName().tokenize('.').last() }

}