Передача артефакта или строки в задание верхнего уровня в трубопроводе Jenkins

Цель

Я пытаюсь организовать цепочку зависимостей, используя плагин организации GitHub вместе с конвейером jenkins.

Поскольку продукты, которые я создаю, имеют несколько общих зависимостей, я использую пакеты nuget для управления версиями и обновлениями зависимостей.

Однако у меня возникли проблемы с получением необходимых артефактов / информации для проектов, выполняющих оркестровку.

стратегия

При изменении SCM любые разделяемые совместно используемые библиотеки должны создавать пакет nuget и организовывать любые последующие сборки, для которых требуются новые ссылки:

  1. Я жестко программирую нижестоящую оркестровку в каждом вышестоящем проекте. Таким образом, если построена A, B и C с зависимостями от A будут построены с последним артефактом от A. После этого D с зависимостями от B и C и E с зависимостями от A и C будут построены с последними артефактами из A, B, C по мере необходимости. И так далее. Все они будут запускаться из Jenkinsfile of A поэтапно, поскольку зависимости строятся с использованием синтаксиса "Build Job: Jobname". Я не смог найти решение, с помощью которого я мог бы просто передавать оркестровку вниз по течению на каждом шаге, так как зависимости расходятся и сходятся вниз по течению, и я не хочу запускать несколько сборок одного и того же проекта вниз по течению с разными ссылками на проекты вверх по течению.
  2. Я могу передать информацию об артефакте для родительского проекта в любые последующие задания, но проблема, с которой я сталкиваюсь, заключается в том, что родительский проект не имеет никакой информации о версиях сборок для нижестоящих артефактов (необходимых для организации заданий далее по течению). Stash/Unstash, похоже, не обладает какой-либо межфункциональной функциональностью, а архивирование / разархивирование не рекомендуется.

TLDR: мне нужен метод передачи строки или текстового файла в восходящем направлении на промежуточное выполнение задания (из нескольких нижестоящих заданий) ИЛИ мне нужен метод для нескольких заданий нижнего потока с общими зависимостями нисходящего потока для координации и совместной передачи информации нижестоящему заданию (вызывая его только один раз).

Спасибо!

3 ответа

Эта статья может быть полезна для вас - https://www.cloudbees.com/blog/using-workflow-deliver-multi-componentapp-pipeline

иногда путь Артефакта необходим. работа вверх по течению:

void runStaging(String VERSION) {
    stagingJob = build job: 'staging-start', parameters: [
        string(name: 'VERSION', value: VERSION),
    ]
    step ([$class: 'CopyArtifact',
        projectName: 'staging-start',
        filter: 'IP',
        selector: [$class: 'SpecificBuildSelector',
            buildNumber: stagingJob.id
        ]
    ]);
    IP = sh(returnStdout: true, script: "cat IP").trim()
    ...
}

работа вниз по течению

sh 'echo 10.10.0.101 > IP'
archiveArtifacts 'IP'

Вы можете использовать buildVariables результата сборки.

Основная работа - настройка: работа трубопровода

node {
    x = build job: 'test1', quietPeriod: 2
    echo "$x.buildVariables.value1fromx"
}

test1 - конфигурация: конвейерная работа

node {
    env.value1fromx = "bull"
    env.value2fromx = "bear"
}

Я закончил тем, что использовал встроенный шаг "архив" ( см. Синтаксис в конвейерном синтаксисе) в сочетании с плагином copyArtifact (необходимо использовать шаг в стиле Java с именем класса).

Я предпочел бы иметь возможность объединить рабочий процесс, а не организовывать нисходящие сборки в каждой сборке с чем-либо для сборки вниз по течению, но пока не смог найти никаких решений для этой цели.