1

我有以下 Jenkins DSL 文件:

if (params["BUILD_SNAPSHOT"] == "true") {
    parallel(
        {
            build("company-main-build-snapshot")
        },
        {
            build("1-company-worker-build-snaphsot", WORKER_NAME: "sharding-worker")
        }
    )
}
parallel (
    {
        build("company-deployment-info",
            API_KEY: "aaaaa5dd4cd58b94215f9cddd4441c391b4ddde226ede98",
            APP: "company-Staging-App")
    },
    {
        build("company-salt-role-deploy",
                ENV: "staging",
                ROLE: "app")
    },
    {
        build("company-deployment-info",
            API_KEY: "aaaaa5dd4cd58b94215f9cddd4441c391b4ddde226ede98",
            APP: "company-Staging-Shardwork")
    },
    {
        build("company-salt-workers-deploy",
                ENVIRONMENT: "staging",
                WORKER_TYPE: "shardwork")
    }
)

if (params["REST_TEST"] == "true") {
    build("company_STAGING_python_rest_test")
}

我的任务是将此工作流文件内容转换/重写为 Jenkins 管道 Jenkinsfile。

我有一些示例文件可供参考,但我很难理解我应该如何开始......

任何人都可以对这个主题有所了解吗?

4

1 回答 1

2

首先,好好看看Jenkins 管道文档,这是一个很好的开始,它提供了大量信息,例如构建参数的使用并行步骤

这里还有一些提示供您探索:

参数

只需将参数名称用作变量,例如:

if (BUILD_SNAPSHOT) {
    ...
}

调用其他工作

您还可以使用构建步骤,例如:

build job: '1-company-worker-build-snaphsot', parameters: [stringParam(name: 'WORKER_NAME', value: "sharding-worker")]

使用函数

与其每次都使用构建步骤调用下游作业,不如考虑使用来自另一个 Groovy 脚本的管道函数,无论是来自当前项目,还是来自外部已签出的 Groovy 脚本。

例如,您可以从以下位置替换您的第二个工作电话:

build("1-company-worker-build-snaphsot", WORKER_NAME: "sharding-worker")

至 :

git 'http://urlToYourGit/projectContainingYourScript'
pipeline = load 'global-functions.groovy'
pipeline.buildSnapshot("sharding-worker")

...当然,在调用所有外部脚本函数之前,只需要一次初始化阶段(Git 检出和管道加载)。

简而言之

总结一下,您的代码可以转换为以下内容:

node {
    git 'http://urlToYourGit/projectContainingYourScript'
    pipeline = load 'global-functions.groovy'

    if(BUILD_SNAPSHOT) {
        parallel (
            phase1: { pipeline.buildMainSnapshot() },
            phase2: { pipeline.buildWorkerSnapshot("sharding-worker") }
        )
    }
    parallel (
        phase1: { pipeline.phase1(params...) },
        phase2: { pipeline.phase2(params...) },
        phase3: { pipeline.phase3(params...) },
        phase4: { pipeline.phase4(params...) }
    )
    if (REST_TEST) {
        pipeline.finalStep()
    }
}
于 2016-08-08T15:46:55.797 回答