Я пытаюсь создать собственный конвейер 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, у вас есть какие-либо предложения по решению этой проблемы?
С наилучшими пожеланиями