Передача артефакта или строки в задание верхнего уровня в трубопроводе Jenkins
Цель
Я пытаюсь организовать цепочку зависимостей, используя плагин организации GitHub вместе с конвейером jenkins.
Поскольку продукты, которые я создаю, имеют несколько общих зависимостей, я использую пакеты nuget для управления версиями и обновлениями зависимостей.
Однако у меня возникли проблемы с получением необходимых артефактов / информации для проектов, выполняющих оркестровку.
стратегия
При изменении SCM любые разделяемые совместно используемые библиотеки должны создавать пакет nuget и организовывать любые последующие сборки, для которых требуются новые ссылки:
- Я жестко программирую нижестоящую оркестровку в каждом вышестоящем проекте. Таким образом, если построена A, B и C с зависимостями от A будут построены с последним артефактом от A. После этого D с зависимостями от B и C и E с зависимостями от A и C будут построены с последними артефактами из A, B, C по мере необходимости. И так далее. Все они будут запускаться из Jenkinsfile of A поэтапно, поскольку зависимости строятся с использованием синтаксиса "Build Job: Jobname". Я не смог найти решение, с помощью которого я мог бы просто передавать оркестровку вниз по течению на каждом шаге, так как зависимости расходятся и сходятся вниз по течению, и я не хочу запускать несколько сборок одного и того же проекта вниз по течению с разными ссылками на проекты вверх по течению.
- Я могу передать информацию об артефакте для родительского проекта в любые последующие задания, но проблема, с которой я сталкиваюсь, заключается в том, что родительский проект не имеет никакой информации о версиях сборок для нижестоящих артефактов (необходимых для организации заданий далее по течению). 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 с именем класса).
Я предпочел бы иметь возможность объединить рабочий процесс, а не организовывать нисходящие сборки в каждой сборке с чем-либо для сборки вниз по течению, но пока не смог найти никаких решений для этой цели.