Как вызвать этапы хранилища Jenkinsfile из пользовательского конвейера Jenkins? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать собственный конвейер Jenkins, который будет связывать вместе артефакты, сгенерированные несколькими заданиями Jenkins.Каждое из этих заданий работает в разных хранилищах (на основе своих собственных файлов Jenkinsfiles).На этих этапах Jenkinsfiles выполняются такие вещи, как создание архивов, компиляция некоторого кода и т. Д.

Можно сказать, что я мог бы использовать артефакты из отдельных заданий, а затем связывать их вместе, но проблема в том, что этот конвейер высокого уровнябудет извлекать данные из этих репозиториев на конкретном git tag, генерировать некоторые подписи файлов, компилировать версию приложения и т. д.

Чтобы дать вам краткое представление, это часть одного из моих файлов Jenkinsfiles, скажем, изcomponentA хранилище:

pipeline {
  agent any
  stages {
    stage('Cleanup library') {
      steps {
        sh 'rm -rf .git .gitignore .gitmodules Jenkinsfile .some_useless_files'
      }
    }
    stage('Pack library') {
      steps {
        sh 'tar -czf my_arch.tar.gz ./*'
      }
    }
    stage('Save artifacts') {
      steps {
        archiveArtifacts 'my_arch.tar.gz'
      }
    }
  }
}

Это основной конвейер:

node {
    dir('compA') {
        git url: 'git@some.path.com:my_lib/componentA.git'
        sh('git checkout $compA_rv')
        load 'Jenkinsfile'
    }
    // some other stuff
    //...
}

Вывод:

+ git checkout compA_rv
Note: checking out 'compA_rv'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 5a840d0... Some commit
[Pipeline] load
[Pipeline] { (Jenkinsfile)
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/apk-release@2
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Cleanup library)
[Pipeline] sh
+ rm -rf .git .gitignore .gitmodules Jenkinsfile .some_useless_files
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Pack library)
[Pipeline] sh
+ tar -czf my_arch.tar.gz ./my_arch.tar.gz
tar: ./my_arch.tar.gz: File shrank by 448 bytes; padding with zeros
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Save artifacts)
Stage "Save artifacts" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // load
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

Кажется, что этот конвейер загружает Jenkinsfile и выполняетон находится в другом каталоге Running on Jenkins in /var/jenkins_home/workspace/apk-release@2, поэтому он не может создавать архив из ничего.

Поскольку я новичок в конвейерах Jenkins, у вас есть какие-либо предложения по решению этой проблемы?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 09 апреля 2019

Я думаю, что вы можете просто переключиться на конвейер целиком и использовать пользовательское рабочее пространство

pipeline {
  agent {
    node {
      label 'my-defined-label'
      customWorkspace '/some/other/path'
    }
  }
  stages {
    stage('Example Build') {
      steps {
        sh 'mvn -B clean verify'
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...