Я искал и не смог найти надлежащую информацию о том, как решить проблему, с которой я столкнулся с копированием артефактов в задания, которые выполняются несколько раз параллельно.
Я определил конвейер со сценариями, который выполняет предопределенные задания поэтапно, некоторые из которых выполняются параллельно, как показано ниже:
основное задание конвейера расположено в этой структуре: / 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 на этапе Core:
`copyArtifacts(projectName: <job to copy from>, flatten: true, target: '../' + <job_for_execution>)`
Это действительно помогает мне решить проблему с копированием необходимых артефактов этими заданиями, но в этом случае у меня возникает другая проблема:
Когда я хочу, чтобы это задание конвейера выполнялось несколько раз с разными параметрами.
Проблема в том, что когда конвейер выполняется во второй раз, а задание, которое выполняется на одном из этапов, выполняется второй раз, оно создает следующий путь на локальном компьютере:
`/jenkins/workspace/test_jobs/<job_for_execution>@2`
Это означает, что то, что у меня есть в моем скрипте, неверно, потому что он копирует файлы в:
`/jenkins/workspace/test_jobs/<job_for_execution>`
он не копирует артефакты в нужное место, и они недоступны из выполненного задания.
Я думал о том, чтобы часть copyArtifacts выполнялась во время команды 'build job' (как вы можете определить в пользовательском интерфейсе Jenkins с передачей BUILD_ID в качестве переменной для копирования подобных артефактов), но я не могу найти никаких подробностей относительно этого, чтобы достичь того же поведения с сценарий.
Как решить эту проблему?