Конвейер сценариев Дженкинса — многократное выполнение с передачей артефактов между этапами

#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 для копирования созданных артефактов, но похоже, что:

  1. он копирует файл в основную папку задания в экземпляре.
  2. из-за разного местоположения рабочей области / проекта мне нужно было определить «целевое» местоположение, чтобы правильно скопировать артефакты в требуемое задание, которое я выполняю в сценарии до выполнения заданий.

например, для 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 текущее рабочее пространство определяется автоматически, вам не нужно указывать каталог. Попробуйте.