Как переписать файл Jenkins DSL в виде jenkinsfile конвейера Jenkins?

У меня есть следующий файл 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.

У меня есть несколько примеров файлов для справки, но мне трудно понять, с чего мне вообще начать...

Кто-нибудь может пролить свет на эту тему?


person Itai Ganot    schedule 08.08.2016    source источник


Ответы (1)


Во-первых, внимательно изучите документацию по конвейеру 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")

to :

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()
    }
}
person Pom12    schedule 08.08.2016