Jenkins 管道使用,无需链接作业



我想从头到尾得到一个链式的工作。但这些作业也需要单独执行。

我想要一个预定的构建,并且需要链接这些作业。

手动运行时,不在级联模式下运行作业。

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

最好的解决方案是什么?

提前谢谢。

所以这是可以做到的,但是我建议将下面概述的函数放在 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() }
}

最新更新