#jenkins #jenkins-pipeline #jenkins-plugins #jenkins-groovy #jenkins-job-dsl
#Дженкинс #дженкинс-конвейер #Дженкинс-плагины #Дженкинс -заводной #дженкинс-задание-dsl
Вопрос:
Я искал и не мог найти надлежащую информацию о том, как решить проблему, с которой я сталкиваюсь при копировании артефактов в задания, которые выполняются несколько раз параллельно.
Я определил конвейер сценариев, который выполняет предопределенные задания поэтапно, некоторые из которых выполняются параллельно следующим образом:
- основное задание конвейера находится в этой структуре: /jenkins/workspace/<main_job> эти задания также готовят артефакты, и позже я копирую их на разные этапы / задания в том же конвейере с идентификатором сборки выполняемого задания.
node() { stage("Creating Build") { def stages = [:] failFast: true stages["Core"] = { copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' coreBuildJob) buildCore = build job: coreBuildJob } } stages["Content"] = { copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' contentBuildJob) buildContent = build job: contentBuildJob } parallel(stages) }
Я использую плагин CopyArtifact для копирования созданных артефактов, но похоже, что:
- он копирует файл в основную папку задания в экземпляре.
- из-за разного местоположения рабочей области / проекта мне нужно было определить «целевое» местоположение, чтобы правильно скопировать артефакты в требуемое задание, которое я выполняю в сценарии до выполнения заданий.
например, для coreBuildJob на основной стадии:
`copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' <job_for_execution>)`
Это помогает мне решить проблему с копированием требуемых артефактов этими заданиями, но в этом случае я сталкиваюсь с другой проблемой:
Когда я хочу, чтобы это задание конвейера по сценарию выполнялось несколько раз с разными параметрами.
Проблема в том, что когда конвейер выполняется во 2-й раз, а задание, выполняемое на одном из этапов, выполняется во 2-й раз, оно создает следующий путь на локальном компьютере:
`/jenkins/workspace/test_jobs/<job_for_execution>@2`
Это означает, что то, что у меня есть в моем скрипте, неверно, потому что он копирует файлы в:
`/jenkins/workspace/test_jobs/<job_for_execution>`
он не копирует артефакты в нужное место, и они недоступны из выполняемого задания.
Я думал о том, чтобы часть copyArtifacts выполнялась во время команды ‘build job’ (как вы можете определить в пользовательском интерфейсе Дженкинса, передав BUILD_ID в качестве переменной для копирования подобных артефактов), но я не могу найти никаких подробностей об этом, чтобы добиться такого же поведения со сценарием.
Как можно решить эту проблему?
Ответ №1:
Вы можете использовать stash / unstash .
После запуска сборки вы можете сохранить:
stash name:'data', includes: './*'
где data — это имя (идентификатор) и включает в себя может быть каталог, подкаталог или отдельный файл.
Затем на этапах, на которых вы хотите получить результат своей сборки, используйте unstash:
unstash 'data'
После выполнения unstash файлы также будут в соответствующей папке, и вы сможете выполнить другие шаги.
Обратитесь к https://www.jenkins.io/doc/pipeline/examples / для получения дополнительной информации.
Комментарии:
1. дело в том, что я должен удалить артефакты в другой каталог, когда одно и то же задание выполняется несколько раз, оно создает разные папки в рабочей области для выполнения parralell. Я не могу знать, какая папка будет создана. Итак, опять та же проблема, что и выше, с плагином copyArtifacts.
2. при unstash текущее рабочее пространство определяется автоматически, вам не нужно указывать каталог. Попробуйте.